Merge "Dump display brightness followers" into udc-dev
diff --git a/Android.bp b/Android.bp
index cff863b..64d2c66 100644
--- a/Android.bp
+++ b/Android.bp
@@ -410,6 +410,7 @@
         "spatializer-aidl-java",
         "audiopolicy-aidl-java",
         "sounddose-aidl-java",
+        "modules-utils-expresslog",
     ],
 }
 
diff --git a/apct-tests/perftests/blobstore/Android.bp b/apct-tests/perftests/blobstore/Android.bp
index 9064b44..2590fe3 100644
--- a/apct-tests/perftests/blobstore/Android.bp
+++ b/apct-tests/perftests/blobstore/Android.bp
@@ -29,7 +29,7 @@
         "androidx.test.rules",
         "androidx.annotation_annotation",
         "apct-perftests-utils",
-        "ub-uiautomator",
+        "androidx.test.uiautomator_uiautomator",
         "collector-device-lib-platform",
         "androidx.benchmark_benchmark-macro",
     ],
diff --git a/apct-tests/perftests/blobstore/src/com/android/perftests/blob/AtraceUtils.java b/apct-tests/perftests/blobstore/src/com/android/perftests/blob/AtraceUtils.java
index 0208dab..4e4780f 100644
--- a/apct-tests/perftests/blobstore/src/com/android/perftests/blob/AtraceUtils.java
+++ b/apct-tests/perftests/blobstore/src/com/android/perftests/blob/AtraceUtils.java
@@ -21,10 +21,10 @@
 import android.os.ParcelFileDescriptor;
 import android.perftests.utils.TraceMarkParser;
 import android.perftests.utils.TraceMarkParser.TraceMarkSlice;
-import android.support.test.uiautomator.UiDevice;
 import android.util.Log;
 
 import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.uiautomator.UiDevice;
 
 import java.io.BufferedReader;
 import java.io.IOException;
diff --git a/apct-tests/perftests/blobstore/src/com/android/perftests/blob/BlobStorePerfTests.java b/apct-tests/perftests/blobstore/src/com/android/perftests/blob/BlobStorePerfTests.java
index 03e5468..3cd9f50 100644
--- a/apct-tests/perftests/blobstore/src/com/android/perftests/blob/BlobStorePerfTests.java
+++ b/apct-tests/perftests/blobstore/src/com/android/perftests/blob/BlobStorePerfTests.java
@@ -25,12 +25,12 @@
 import android.perftests.utils.PerfManualStatusReporter;
 import android.perftests.utils.TraceMarkParser;
 import android.perftests.utils.TraceMarkParser.TraceMarkSlice;
-import android.support.test.uiautomator.UiDevice;
 import android.util.DataUnit;
 
 import androidx.benchmark.macro.MacrobenchmarkScope;
 import androidx.test.filters.LargeTest;
 import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.uiautomator.UiDevice;
 
 import com.android.utils.blob.FakeBlobData;
 
diff --git a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
index 051dde0..b732da2 100644
--- a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
+++ b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
@@ -127,6 +127,7 @@
     private BroadcastWaiter mBroadcastWaiter;
     private UserSwitchWaiter mUserSwitchWaiter;
     private String mUserSwitchTimeoutMs;
+    private String mDisableUserSwitchingDialogAnimations;
 
     private final BenchmarkRunner mRunner = new BenchmarkRunner();
     @Rule
@@ -153,16 +154,17 @@
             Log.w(TAG, "WARNING: Tests are being run from user " + mAm.getCurrentUser()
                     + " rather than the system user");
         }
-        mUserSwitchTimeoutMs = setSystemProperty("debug.usercontroller.user_switch_timeout_ms",
-                "100000");
-        if (TextUtils.isEmpty(mUserSwitchTimeoutMs)) {
-            mUserSwitchTimeoutMs = "invalid";
-        }
+        mUserSwitchTimeoutMs = setSystemProperty(
+                "debug.usercontroller.user_switch_timeout_ms", "100000");
+        mDisableUserSwitchingDialogAnimations = setSystemProperty(
+                "debug.usercontroller.disable_user_switching_dialog_animations", "true");
     }
 
     @After
     public void tearDown() throws Exception {
         setSystemProperty("debug.usercontroller.user_switch_timeout_ms", mUserSwitchTimeoutMs);
+        setSystemProperty("debug.usercontroller.disable_user_switching_dialog_animations",
+                mDisableUserSwitchingDialogAnimations);
         mBroadcastWaiter.close();
         mUserSwitchWaiter.close();
         for (int userId : mUsersToRemove) {
@@ -1538,7 +1540,7 @@
     private String setSystemProperty(String name, String value) throws Exception {
         final String oldValue = ShellHelper.runShellCommand("getprop " + name);
         assertEquals("", ShellHelper.runShellCommand("setprop " + name + " " + value));
-        return oldValue;
+        return TextUtils.firstNotEmpty(oldValue, "invalid");
     }
 
     private void waitForBroadcastIdle() {
diff --git a/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java b/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java
index f56e1ee..36174c6 100644
--- a/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java
@@ -20,6 +20,7 @@
 import android.app.JobSchedulerImpl;
 import android.app.SystemServiceRegistry;
 import android.app.tare.EconomyManager;
+import android.app.tare.IEconomyManager;
 import android.content.Context;
 import android.os.DeviceIdleManager;
 import android.os.IDeviceIdleController;
@@ -58,6 +59,7 @@
                 Context.POWER_EXEMPTION_SERVICE, PowerExemptionManager.class,
                 PowerExemptionManager::new);
         SystemServiceRegistry.registerStaticService(
-                Context.RESOURCE_ECONOMY_SERVICE, EconomyManager.class, EconomyManager::new);
+                Context.RESOURCE_ECONOMY_SERVICE, EconomyManager.class,
+                (b) -> new EconomyManager(IEconomyManager.Stub.asInterface(b)));
     }
 }
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/framework/java/android/app/tare/EconomyManager.java b/apex/jobscheduler/framework/java/android/app/tare/EconomyManager.java
index 581ea7a..0bea028 100644
--- a/apex/jobscheduler/framework/java/android/app/tare/EconomyManager.java
+++ b/apex/jobscheduler/framework/java/android/app/tare/EconomyManager.java
@@ -19,7 +19,9 @@
 import android.annotation.IntDef;
 import android.annotation.Nullable;
 import android.annotation.SystemService;
+import android.annotation.TestApi;
 import android.content.Context;
+import android.os.RemoteException;
 import android.util.Log;
 
 import java.lang.annotation.Retention;
@@ -30,6 +32,7 @@
  *
  * @hide
  */
+@TestApi
 @SystemService(Context.RESOURCE_ECONOMY_SERVICE)
 public class EconomyManager {
     private static final String TAG = "TARE-" + EconomyManager.class.getSimpleName();
@@ -95,13 +98,17 @@
         }
     }
 
-
+    /** @hide */
+    @TestApi
     public static final int ENABLED_MODE_OFF = 0;
+    /** @hide */
     public static final int ENABLED_MODE_ON = 1;
     /**
      * Go through the motions, tracking events, updating balances and other TARE state values,
      * but don't use TARE to affect actual device behavior.
+     * @hide
      */
+    @TestApi
     public static final int ENABLED_MODE_SHADOW = 2;
 
     /** @hide */
@@ -114,6 +121,7 @@
     public @interface EnabledMode {
     }
 
+    /** @hide */
     public static String enabledModeToString(@EnabledMode int mode) {
         switch (mode) {
             case ENABLED_MODE_OFF: return "ENABLED_MODE_OFF";
@@ -123,11 +131,18 @@
         }
     }
 
+    /** @hide */
+    @TestApi
     public static final String KEY_ENABLE_TARE_MODE = "enable_tare_mode";
+    /** @hide */
     public static final String KEY_ENABLE_POLICY_ALARM = "enable_policy_alarm";
+    /** @hide */
     public static final String KEY_ENABLE_POLICY_JOB_SCHEDULER = "enable_policy_job";
+    /** @hide */
     public static final int DEFAULT_ENABLE_TARE_MODE = ENABLED_MODE_OFF;
+    /** @hide */
     public static final boolean DEFAULT_ENABLE_POLICY_ALARM = true;
+    /** @hide */
     public static final boolean DEFAULT_ENABLE_POLICY_JOB_SCHEDULER = true;
 
     // Keys for AlarmManager TARE factors
@@ -612,4 +627,27 @@
     public static final long DEFAULT_JS_ACTION_JOB_MIN_RUNNING_BASE_PRICE_CAKES = arcToCake(1);
     /** @hide */
     public static final long DEFAULT_JS_ACTION_JOB_TIMEOUT_PENALTY_BASE_PRICE_CAKES = arcToCake(60);
+
+    //////// APIs below ////////
+
+    private final IEconomyManager mService;
+
+    /** @hide */
+    public EconomyManager(IEconomyManager service) {
+        mService = service;
+    }
+
+    /**
+     * Returns the current enabled status of TARE.
+     * @hide
+     */
+    @EnabledMode
+    @TestApi
+    public int getEnabledMode() {
+        try {
+            return mService.getEnabledMode();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
 }
diff --git a/apex/jobscheduler/framework/java/android/app/tare/IEconomyManager.aidl b/apex/jobscheduler/framework/java/android/app/tare/IEconomyManager.aidl
index bb15011..2be0db7 100644
--- a/apex/jobscheduler/framework/java/android/app/tare/IEconomyManager.aidl
+++ b/apex/jobscheduler/framework/java/android/app/tare/IEconomyManager.aidl
@@ -21,4 +21,5 @@
   * {@hide}
   */
 interface IEconomyManager {
+    int getEnabledMode();
 }
diff --git a/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
index 64b2423..fd8ddbc 100644
--- a/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
+++ b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
@@ -69,8 +69,8 @@
      * @return {@code true} if the given notification channel is associated with any user-initiated
      * jobs.
      */
-    boolean isNotificationChannelAssociatedWithAnyUserInitiatedJobs(String notificationChannel,
-            int userId, String packageName);
+    boolean isNotificationChannelAssociatedWithAnyUserInitiatedJobs(
+            @NonNull String notificationChannel, int userId, @NonNull String packageName);
 
     /**
      * Report a snapshot of sync-related jobs back to the sync manager
diff --git a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
index 0650ce3..f779b4d 100644
--- a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
+++ b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
@@ -355,7 +355,7 @@
     @GuardedBy("this")
     private boolean mHasGps;
     @GuardedBy("this")
-    private boolean mHasNetworkLocation;
+    private boolean mHasFusedLocation;
     @GuardedBy("this")
     private Location mLastGenericLocation;
     @GuardedBy("this")
@@ -3782,12 +3782,14 @@
                 scheduleAlarmLocked(mConstants.LOCATING_TIMEOUT);
                 LocationManager locationManager = mInjector.getLocationManager();
                 if (locationManager != null
-                        && locationManager.getProvider(LocationManager.NETWORK_PROVIDER) != null) {
-                    locationManager.requestLocationUpdates(mLocationRequest,
-                            mGenericLocationListener, mHandler.getLooper());
+                        && locationManager.getProvider(LocationManager.FUSED_PROVIDER) != null) {
+                    locationManager.requestLocationUpdates(LocationManager.FUSED_PROVIDER,
+                            mLocationRequest,
+                            AppSchedulingModuleThread.getExecutor(),
+                            mGenericLocationListener);
                     mLocating = true;
                 } else {
-                    mHasNetworkLocation = false;
+                    mHasFusedLocation = false;
                 }
                 if (locationManager != null
                         && locationManager.getProvider(LocationManager.GPS_PROVIDER) != null) {
@@ -5301,9 +5303,10 @@
                 pw.print("  "); pw.print(mStationaryListeners.size());
                 pw.println(" stationary listeners registered");
             }
-            pw.print("  mLocating="); pw.print(mLocating); pw.print(" mHasGps=");
-                    pw.print(mHasGps); pw.print(" mHasNetwork=");
-                    pw.print(mHasNetworkLocation); pw.print(" mLocated="); pw.println(mLocated);
+            pw.print("  mLocating="); pw.print(mLocating);
+            pw.print(" mHasGps="); pw.print(mHasGps);
+            pw.print(" mHasFused="); pw.print(mHasFusedLocation);
+            pw.print(" mLocated="); pw.println(mLocated);
             if (mLastGenericLocation != null) {
                 pw.print("  mLastGenericLocation="); pw.println(mLastGenericLocation);
             }
diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
index 3772960..df1b666 100644
--- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
@@ -4873,8 +4873,7 @@
                                 }
                             }
                             if (wakeupUids.size() > 0 && mBatteryStatsInternal != null) {
-                                mBatteryStatsInternal.noteCpuWakingActivity(
-                                        BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_ALARM, nowELAPSED,
+                                mBatteryStatsInternal.noteWakingAlarmBatch(nowELAPSED,
                                         wakeupUids.toArray());
                             }
                             deliverAlarmsLocked(triggerList, nowELAPSED);
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java b/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java
index 8bd3d127..b9b825c 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java
@@ -1925,16 +1925,14 @@
         return null;
     }
 
-    @GuardedBy("mLock")
     boolean isNotificationAssociatedWithAnyUserInitiatedJobs(int notificationId, int userId,
-            String packageName) {
+            @NonNull String packageName) {
         return mNotificationCoordinator.isNotificationAssociatedWithAnyUserInitiatedJobs(
                 notificationId, userId, packageName);
     }
 
-    @GuardedBy("mLock")
-    boolean isNotificationChannelAssociatedWithAnyUserInitiatedJobs(String notificationChannel,
-            int userId, String packageName) {
+    boolean isNotificationChannelAssociatedWithAnyUserInitiatedJobs(
+            @NonNull String notificationChannel, int userId, @NonNull String packageName) {
         return mNotificationCoordinator.isNotificationChannelAssociatedWithAnyUserInitiatedJobs(
                 notificationChannel, userId, packageName);
     }
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobNotificationCoordinator.java b/apex/jobscheduler/service/java/com/android/server/job/JobNotificationCoordinator.java
index f6e00ec..d94674b 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobNotificationCoordinator.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobNotificationCoordinator.java
@@ -27,9 +27,12 @@
 import android.os.UserHandle;
 import android.util.ArrayMap;
 import android.util.ArraySet;
+import android.util.IntArray;
 import android.util.Slog;
+import android.util.SparseArrayMap;
 import android.util.SparseSetArray;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.server.LocalServices;
 import com.android.server.job.controllers.JobStatus;
 import com.android.server.notification.NotificationManagerInternal;
@@ -38,6 +41,14 @@
     private static final String TAG = "JobNotificationCoordinator";
 
     /**
+     * Local lock for independent objects like mUijNotifications and mUijNotificationChannels which
+     * don't depend on other JS objects such as JobServiceContext which require the global JS lock.
+     *
+     * Note: do <b>NOT</b> acquire the global lock while this one is held.
+     */
+    private final Object mUijLock = new Object();
+
+    /**
      * Mapping of UserPackage -> {notificationId -> List<JobServiceContext>} to track which jobs
      * are associated with each app's notifications.
      */
@@ -49,6 +60,27 @@
     private final ArrayMap<JobServiceContext, NotificationDetails> mNotificationDetails =
             new ArrayMap<>();
 
+    /**
+     * Mapping of userId -> {packageName, notificationIds} tracking which notifications
+     * associated with each app belong to user-initiated jobs.
+     *
+     * Note: this map can be accessed without holding the main JS lock, so that other services like
+     * NotificationManagerService can call into JS and verify associations.
+     */
+    @GuardedBy("mUijLock")
+    private final SparseArrayMap<String, IntArray> mUijNotifications = new SparseArrayMap<>();
+
+    /**
+     * Mapping of userId -> {packageName, notificationChannels} tracking which notification channels
+     * associated with each app are hosting a user-initiated job notification.
+     *
+     * Note: this map can be accessed without holding the main JS lock, so that other services like
+     * NotificationManagerService can call into JS and verify associations.
+     */
+    @GuardedBy("mUijLock")
+    private final SparseArrayMap<String, ArraySet<String>> mUijNotificationChannels =
+            new SparseArrayMap<>();
+
     private static final class NotificationDetails {
         @NonNull
         public final UserPackage userPackage;
@@ -81,15 +113,24 @@
             int callingPid, int callingUid, int notificationId, @NonNull Notification notification,
             @JobService.JobEndNotificationPolicy int jobEndNotificationPolicy) {
         validateNotification(packageName, callingUid, notification, jobEndNotificationPolicy);
+        final JobStatus jobStatus = hostingContext.getRunningJobLocked();
         final NotificationDetails oldDetails = mNotificationDetails.get(hostingContext);
         if (oldDetails != null && oldDetails.notificationId != notificationId) {
             // App is switching notification IDs. Remove association with the old one.
-            removeNotificationAssociation(hostingContext, JobParameters.STOP_REASON_UNDEFINED);
+            removeNotificationAssociation(hostingContext, JobParameters.STOP_REASON_UNDEFINED,
+                    jobStatus);
         }
         final int userId = UserHandle.getUserId(callingUid);
-        final JobStatus jobStatus = hostingContext.getRunningJobLocked();
         if (jobStatus != null && jobStatus.startedAsUserInitiatedJob) {
             notification.flags |= Notification.FLAG_USER_INITIATED_JOB;
+            synchronized (mUijLock) {
+                maybeCreateUijNotificationSetsLocked(userId, packageName);
+                final IntArray notificationIds = mUijNotifications.get(userId, packageName);
+                if (notificationIds.indexOf(notificationId) == -1) {
+                    notificationIds.add(notificationId);
+                }
+                mUijNotificationChannels.get(userId, packageName).add(notification.getChannelId());
+            }
         }
         final UserPackage userPackage = UserPackage.of(userId, packageName);
         final NotificationDetails details = new NotificationDetails(
@@ -110,7 +151,7 @@
     }
 
     void removeNotificationAssociation(@NonNull JobServiceContext hostingContext,
-            @JobParameters.StopReason int stopReason) {
+            @JobParameters.StopReason int stopReason, JobStatus completedJob) {
         final NotificationDetails details = mNotificationDetails.remove(hostingContext);
         if (details == null) {
             return;
@@ -121,10 +162,11 @@
             Slog.wtf(TAG, "Association data structures not in sync");
             return;
         }
-        final String packageName = details.userPackage.packageName;
         final int userId = UserHandle.getUserId(details.appUid);
+        final String packageName = details.userPackage.packageName;
+        final int notificationId = details.notificationId;
         boolean stripUijFlag = true;
-        ArraySet<JobServiceContext> associatedContexts = associations.get(details.notificationId);
+        ArraySet<JobServiceContext> associatedContexts = associations.get(notificationId);
         if (associatedContexts == null || associatedContexts.isEmpty()) {
             // No more jobs using this notification. Apply the final job stop policy.
             // If the user attempted to stop the job/app, then always remove the notification
@@ -133,23 +175,50 @@
                     || stopReason == JobParameters.STOP_REASON_USER) {
                 mNotificationManagerInternal.cancelNotification(
                         packageName, packageName, details.appUid, details.appPid, /* tag */ null,
-                        details.notificationId, userId);
+                        notificationId, userId);
                 stripUijFlag = false;
             }
         } else {
             // Strip the UIJ flag only if there are no other UIJs associated with the notification
-            stripUijFlag = !isNotificationAssociatedWithAnyUserInitiatedJobs(
-                    details.notificationId, userId, packageName);
+            stripUijFlag = !isNotificationUsedForAnyUij(userId, packageName, notificationId);
         }
         if (stripUijFlag) {
-            // Strip the user-initiated job flag from the notification.
             mNotificationManagerInternal.removeUserInitiatedJobFlagFromNotification(
-                    packageName, details.notificationId, userId);
+                    packageName, notificationId, userId);
+        }
+
+        // Clean up UIJ related objects if the just completed job was a UIJ
+        if (completedJob != null && completedJob.startedAsUserInitiatedJob) {
+            maybeDeleteNotificationIdAssociation(userId, packageName, notificationId);
+            maybeDeleteNotificationChannelAssociation(
+                    userId, packageName, details.notificationChannel);
         }
     }
 
     boolean isNotificationAssociatedWithAnyUserInitiatedJobs(int notificationId,
-            int userId, String packageName) {
+            int userId, @NonNull String packageName) {
+        synchronized (mUijLock) {
+            final IntArray notifications = mUijNotifications.get(userId, packageName);
+            if (notifications != null) {
+                return notifications.indexOf(notificationId) != -1;
+            }
+            return false;
+        }
+    }
+
+    boolean isNotificationChannelAssociatedWithAnyUserInitiatedJobs(
+            @NonNull String notificationChannel, int userId, @NonNull String packageName) {
+        synchronized (mUijLock) {
+            final ArraySet<String> channels = mUijNotificationChannels.get(userId, packageName);
+            if (channels != null) {
+                return channels.contains(notificationChannel);
+            }
+            return false;
+        }
+    }
+
+    private boolean isNotificationUsedForAnyUij(int userId, String packageName,
+            int notificationId) {
         final UserPackage pkgDetails = UserPackage.of(userId, packageName);
         final SparseSetArray<JobServiceContext> associations = mCurrentAssociations.get(pkgDetails);
         if (associations == null) {
@@ -170,8 +239,26 @@
         return false;
     }
 
-    boolean isNotificationChannelAssociatedWithAnyUserInitiatedJobs(String notificationChannel,
-            int userId, String packageName) {
+    private void maybeDeleteNotificationIdAssociation(int userId, String packageName,
+            int notificationId) {
+        if (isNotificationUsedForAnyUij(userId, packageName, notificationId)) {
+            return;
+        }
+
+        // Safe to delete - no UIJs for this package are using this notification id
+        synchronized (mUijLock) {
+            final IntArray notifications = mUijNotifications.get(userId, packageName);
+            if (notifications != null) {
+                notifications.remove(notifications.indexOf(notificationId));
+                if (notifications.size() == 0) {
+                    mUijNotifications.delete(userId, packageName);
+                }
+            }
+        }
+    }
+
+    private void maybeDeleteNotificationChannelAssociation(int userId, String packageName,
+            String notificationChannel) {
         for (int i = mNotificationDetails.size() - 1; i >= 0; i--) {
             final JobServiceContext jsc = mNotificationDetails.keyAt(i);
             final NotificationDetails details = mNotificationDetails.get(jsc);
@@ -183,11 +270,31 @@
                     && details.notificationChannel.equals(notificationChannel)) {
                 final JobStatus jobStatus = jsc.getRunningJobLocked();
                 if (jobStatus != null && jobStatus.startedAsUserInitiatedJob) {
-                    return true;
+                    return;
                 }
             }
         }
-        return false;
+
+        // Safe to delete - no UIJs for this package are using this notification channel
+        synchronized (mUijLock) {
+            ArraySet<String> channels = mUijNotificationChannels.get(userId, packageName);
+            if (channels != null) {
+                channels.remove(notificationChannel);
+                if (channels.isEmpty()) {
+                    mUijNotificationChannels.delete(userId, packageName);
+                }
+            }
+        }
+    }
+
+    @GuardedBy("mUijLock")
+    private void maybeCreateUijNotificationSetsLocked(int userId, String packageName) {
+        if (mUijNotifications.get(userId, packageName) == null) {
+            mUijNotifications.add(userId, packageName, new IntArray());
+        }
+        if (mUijNotificationChannels.get(userId, packageName) == null) {
+            mUijNotificationChannels.add(userId, packageName, new ArraySet<>());
+        }
     }
 
     private void validateNotification(@NonNull String packageName, int callingUid,
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 aef9dd0..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;
@@ -1588,12 +1586,12 @@
         final ArrayMap<String, List<JobInfo>> outMap = new ArrayMap<>();
         synchronized (mLock) {
             ArraySet<JobStatus> jobs = mJobs.getJobsByUid(uid);
-            // Write out for loop to avoid addAll() creating an Iterator.
+            // Write out for loop to avoid creating an Iterator.
             for (int i = jobs.size() - 1; i >= 0; i--) {
                 final JobStatus job = jobs.valueAt(i);
                 List<JobInfo> outList = outMap.get(job.getNamespace());
                 if (outList == null) {
-                    outList = new ArrayList<JobInfo>(jobs.size());
+                    outList = new ArrayList<>();
                     outMap.put(job.getNamespace(), outList);
                 }
 
@@ -1606,7 +1604,7 @@
     private List<JobInfo> getPendingJobsInNamespace(int uid, @Nullable String namespace) {
         synchronized (mLock) {
             ArraySet<JobStatus> jobs = mJobs.getJobsByUid(uid);
-            ArrayList<JobInfo> outList = new ArrayList<JobInfo>(jobs.size());
+            ArrayList<JobInfo> outList = new ArrayList<>();
             // Write out for loop to avoid addAll() creating an Iterator.
             for (int i = jobs.size() - 1; i >= 0; i--) {
                 final JobStatus job = jobs.valueAt(i);
@@ -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();
     }
 
     /**
@@ -3713,26 +3713,22 @@
 
         @Override
         public boolean isNotificationAssociatedWithAnyUserInitiatedJobs(int notificationId,
-                int userId, String packageName) {
+                int userId, @NonNull String packageName) {
             if (packageName == null) {
                 return false;
             }
-            synchronized (mLock) {
-                return mConcurrencyManager.isNotificationAssociatedWithAnyUserInitiatedJobs(
-                        notificationId, userId, packageName);
-            }
+            return mConcurrencyManager.isNotificationAssociatedWithAnyUserInitiatedJobs(
+                    notificationId, userId, packageName);
         }
 
         @Override
         public boolean isNotificationChannelAssociatedWithAnyUserInitiatedJobs(
-                String notificationChannel, int userId, String packageName) {
+                @NonNull String notificationChannel, int userId, @NonNull String packageName) {
             if (packageName == null || notificationChannel == null) {
                 return false;
             }
-            synchronized (mLock) {
-                return mConcurrencyManager.isNotificationChannelAssociatedWithAnyUserInitiatedJobs(
-                        notificationChannel, userId, packageName);
-            }
+            return mConcurrencyManager.isNotificationChannelAssociatedWithAnyUserInitiatedJobs(
+                    notificationChannel, userId, packageName);
         }
 
         @Override
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java
index 44700c8..fb36cde 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java
@@ -1464,7 +1464,8 @@
                     JobSchedulerEconomicPolicy.ACTION_JOB_TIMEOUT,
                     String.valueOf(mRunningJob.getJobId()));
         }
-        mNotificationCoordinator.removeNotificationAssociation(this, reschedulingStopReason);
+        mNotificationCoordinator.removeNotificationAssociation(this,
+                reschedulingStopReason, completedJob);
         if (mWakeLock != null) {
             mWakeLock.release();
         }
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
index fc60228..ba62e96 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
@@ -31,7 +31,7 @@
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.expresslog.Counter;
+import com.android.modules.expresslog.Counter;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.StateControllerProto;
 
diff --git a/apex/jobscheduler/service/java/com/android/server/job/restrictions/ThermalStatusRestriction.java b/apex/jobscheduler/service/java/com/android/server/job/restrictions/ThermalStatusRestriction.java
index eb43c38..ef634b5 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/restrictions/ThermalStatusRestriction.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/restrictions/ThermalStatusRestriction.java
@@ -92,13 +92,17 @@
         final int priority = job.getEffectivePriority();
         if (mThermalStatus >= HIGHER_PRIORITY_THRESHOLD) {
             // For moderate throttling:
-            // Only let expedited & user-initiated jobs run if:
+            // Let all user-initiated jobs run.
+            // Only let expedited jobs run if:
             // 1. They haven't previously run
             // 2. They're already running and aren't yet in overtime
             // Only let high priority jobs run if:
             //   They are already running and aren't yet in overtime
             // Don't let any other job run.
-            if (job.shouldTreatAsExpeditedJob() || job.shouldTreatAsUserInitiatedJob()) {
+            if (job.shouldTreatAsUserInitiatedJob()) {
+                return false;
+            }
+            if (job.shouldTreatAsExpeditedJob()) {
                 return job.getNumPreviousAttempts() > 0
                         || (mService.isCurrentlyRunningLocked(job)
                                 && mService.isJobInOvertimeLocked(job));
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 7f6a75e..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,12 @@
         }
 
         @Override
+        @EconomyManager.EnabledMode
+        public int getEnabledMode() {
+            return InternalResourceService.this.getEnabledMode();
+        }
+
+        @Override
         public int handleShellCommand(@NonNull ParcelFileDescriptor in,
                 @NonNull ParcelFileDescriptor out, @NonNull ParcelFileDescriptor err,
                 @NonNull String[] args) {
diff --git a/boot/boot-image-profile.txt b/boot/boot-image-profile.txt
index 996c388..aebace5 100644
--- a/boot/boot-image-profile.txt
+++ b/boot/boot-image-profile.txt
@@ -33583,8 +33583,8 @@
 Lcom/android/internal/dynamicanimation/animation/Force;
 Lcom/android/internal/dynamicanimation/animation/SpringAnimation;
 Lcom/android/internal/dynamicanimation/animation/SpringForce;
-Lcom/android/internal/expresslog/Counter;
-Lcom/android/internal/expresslog/Utils;
+Lcom/android/modules/expresslog/Counter;
+Lcom/android/modules/expresslog/Utils;
 Lcom/android/internal/graphics/ColorUtils$ContrastCalculator;
 Lcom/android/internal/graphics/ColorUtils;
 Lcom/android/internal/graphics/SfVsyncFrameCallbackProvider;
diff --git a/boot/preloaded-classes b/boot/preloaded-classes
index 21ae134..4293caf 100644
--- a/boot/preloaded-classes
+++ b/boot/preloaded-classes
@@ -10784,8 +10784,8 @@
 com.android.internal.dynamicanimation.animation.Force
 com.android.internal.dynamicanimation.animation.SpringAnimation
 com.android.internal.dynamicanimation.animation.SpringForce
-com.android.internal.expresslog.Counter
-com.android.internal.expresslog.Utils
+com.android.modules.expresslog.Counter
+com.android.modules.expresslog.Utils
 com.android.internal.graphics.ColorUtils$ContrastCalculator
 com.android.internal.graphics.ColorUtils
 com.android.internal.graphics.SfVsyncFrameCallbackProvider
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
index 6998081..b6dc32a 100644
--- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
+++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
@@ -21,6 +21,7 @@
 import android.app.backup.BackupManager;
 import android.app.backup.BackupManagerMonitor;
 import android.app.backup.BackupProgress;
+import android.app.backup.BackupRestoreEventLogger;
 import android.app.backup.BackupTransport;
 import android.app.backup.IBackupManager;
 import android.app.backup.IBackupManagerMonitor;
@@ -821,14 +822,22 @@
             doRestorePackage(arg);
         } else {
             try {
+                @Monitor int monitor = Monitor.OFF;
+
                 long token = Long.parseLong(arg, 16);
                 HashSet<String> filter = null;
                 while ((arg = nextArg()) != null) {
-                    if (filter == null) filter = new HashSet<String>();
-                    filter.add(arg);
+                    if (arg.equals("--monitor")) {
+                        monitor = Monitor.NORMAL;
+                    } else if (arg.equals("--monitor-verbose")) {
+                        monitor = Monitor.VERBOSE;
+                    } else {
+                        if (filter == null) filter = new HashSet<String>();
+                        filter.add(arg);
+                    }
                 }
 
-                doRestoreAll(userId, token, filter);
+                doRestoreAll(userId, token, filter, monitor);
             } catch (NumberFormatException e) {
                 showUsage();
                 return;
@@ -841,7 +850,8 @@
         System.err.println("'restore <token> <package>'.");
     }
 
-    private void doRestoreAll(@UserIdInt int userId, long token, HashSet<String> filter) {
+    private void doRestoreAll(@UserIdInt int userId, long token, HashSet<String> filter,
+            @Monitor int monitorState) {
         RestoreObserver observer = new RestoreObserver();
 
         try {
@@ -852,8 +862,11 @@
                 return;
             }
             RestoreSet[] sets = null;
-            // TODO implement monitor here
-            int err = mRestore.getAvailableRestoreSets(observer, null);
+            BackupMonitor monitor =
+                    (monitorState != Monitor.OFF)
+                            ? new BackupMonitor(monitorState == Monitor.VERBOSE)
+                            : null;
+            int err = mRestore.getAvailableRestoreSets(observer, monitor);
             if (err == 0) {
                 observer.waitForCompletion();
                 sets = observer.sets;
@@ -862,12 +875,12 @@
                         if (s.token == token) {
                             System.out.println("Scheduling restore: " + s.name);
                             if (filter == null) {
-                                didRestore = (mRestore.restoreAll(token, observer, null) == 0);
+                                didRestore = (mRestore.restoreAll(token, observer, monitor) == 0);
                             } else {
                                 String[] names = new String[filter.size()];
                                 filter.toArray(names);
                                 didRestore = (mRestore.restorePackages(token, observer, names,
-                                        null) == 0);
+                                        monitor) == 0);
                             }
                             break;
                         }
@@ -958,8 +971,8 @@
         System.err.println("       bmgr list transports [-c]");
         System.err.println("       bmgr list sets");
         System.err.println("       bmgr transport WHICH|-c WHICH_COMPONENT");
-        System.err.println("       bmgr restore TOKEN");
-        System.err.println("       bmgr restore TOKEN PACKAGE...");
+        System.err.println("       bmgr restore TOKEN [--monitor|--monitor-verbose]");
+        System.err.println("       bmgr restore TOKEN PACKAGE... [--monitor|--monitor-verbose]");
         System.err.println("       bmgr run");
         System.err.println("       bmgr wipe TRANSPORT PACKAGE");
         System.err.println("       bmgr fullbackup PACKAGE...");
@@ -1005,12 +1018,18 @@
         System.err.println("restore operation from the currently active transport.  It will deliver");
         System.err.println("the restore set designated by the TOKEN argument to each application");
         System.err.println("that had contributed data to that restore set.");
+        System.err.println("    --monitor flag prints monitor events (important events and errors");
+        System.err.println("              encountered during restore).");
+        System.err.println("    --monitor-verbose flag prints monitor events with all keys.");
         System.err.println("");
         System.err.println("The 'restore' command when given a token and one or more package names");
         System.err.println("initiates a restore operation of just those given packages from the restore");
         System.err.println("set designated by the TOKEN argument.  It is effectively the same as the");
         System.err.println("'restore' operation supplying only a token, but applies a filter to the");
         System.err.println("set of applications to be restored.");
+        System.err.println("    --monitor flag prints monitor events (important events and errors");
+        System.err.println("              encountered during restore).");
+        System.err.println("    --monitor-verbose flag prints monitor events with all keys.");
         System.err.println("");
         System.err.println("The 'run' command causes any scheduled backup operation to be initiated");
         System.err.println("immediately, without the usual waiting period for batching together");
@@ -1026,7 +1045,8 @@
         System.err.println("");
         System.err.println("The 'backupnow' command runs an immediate backup for one or more packages.");
         System.err.println("    --all flag runs backup for all eligible packages.");
-        System.err.println("    --monitor flag prints monitor events.");
+        System.err.println("    --monitor flag prints monitor events (important events and errors");
+        System.err.println("              encountered during backup).");
         System.err.println("    --monitor-verbose flag prints monitor events with all keys.");
         System.err.println("For each package it will run key/value or full data backup ");
         System.err.println("depending on the package's manifest declarations.");
@@ -1076,6 +1096,37 @@
                     out.append("(v").append(version).append(")");
                 }
             }
+            if (event.containsKey(BackupManagerMonitor.EXTRA_LOG_AGENT_LOGGING_RESULTS)) {
+                ArrayList<BackupRestoreEventLogger.DataTypeResult> results =
+                        event.getParcelableArrayList(
+                                BackupManagerMonitor.EXTRA_LOG_AGENT_LOGGING_RESULTS,
+                                BackupRestoreEventLogger.DataTypeResult.class);
+                out.append(", results = [");
+                for (BackupRestoreEventLogger.DataTypeResult result : results) {
+                    out.append("\n{\n\tdataType: ");
+                    out.append(result.getDataType());
+                    out.append("\n\tsuccessCount: ");
+                    out.append(result.getSuccessCount());
+                    out.append("\n\tfailCount: ");
+                    out.append(result.getFailCount());
+                    out.append("\n\tmetadataHash: ");
+                    out.append(Arrays.toString(result.getMetadataHash()));
+
+                    if (!result.getErrors().isEmpty()) {
+                        out.append("\n\terrors: [");
+                        for (String error : result.getErrors().keySet()) {
+                            out.append(error);
+                            out.append(": ");
+                            out.append(result.getErrors().get(error));
+                            out.append(";");
+                        }
+                        out.append("]");
+                    }
+                    out.append("\n}");
+
+                }
+                out.append("]");
+            }
             if (mVerbose) {
                 Set<String> remainingKeys = new ArraySet<>(event.keySet());
                 remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_ID);
@@ -1083,6 +1134,7 @@
                 remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_NAME);
                 remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION);
                 remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_VERSION);
+                remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_AGENT_LOGGING_RESULTS);
                 if (!remainingKeys.isEmpty()) {
                     out.append(", other keys =");
                     for (String key : remainingKeys) {
@@ -1192,6 +1244,8 @@
                 return "NO_PACKAGES";
             case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_IS_NULL:
                 return "TRANSPORT_IS_NULL";
+            case BackupManagerMonitor.LOG_EVENT_ID_AGENT_LOGGING_RESULTS:
+                return "AGENT_LOGGING_RESULTS";
             default:
                 return "UNKNOWN_ID";
         }
diff --git a/config/boot-image-profile.txt b/config/boot-image-profile.txt
index 3cc9908..bb07487 100644
--- a/config/boot-image-profile.txt
+++ b/config/boot-image-profile.txt
@@ -43717,8 +43717,8 @@
 Lcom/android/internal/dynamicanimation/animation/Force;
 Lcom/android/internal/dynamicanimation/animation/SpringAnimation;
 Lcom/android/internal/dynamicanimation/animation/SpringForce;
-Lcom/android/internal/expresslog/Counter;
-Lcom/android/internal/expresslog/Utils;
+Lcom/android/modules/expresslog/Counter;
+Lcom/android/modules/expresslog/Utils;
 Lcom/android/internal/graphics/ColorUtils$ContrastCalculator;
 Lcom/android/internal/graphics/ColorUtils;
 Lcom/android/internal/graphics/SfVsyncFrameCallbackProvider;
diff --git a/config/preloaded-classes b/config/preloaded-classes
index 8e50fe8..1812c2b 100644
--- a/config/preloaded-classes
+++ b/config/preloaded-classes
@@ -10815,8 +10815,8 @@
 com.android.internal.dynamicanimation.animation.Force
 com.android.internal.dynamicanimation.animation.SpringAnimation
 com.android.internal.dynamicanimation.animation.SpringForce
-com.android.internal.expresslog.Counter
-com.android.internal.expresslog.Utils
+com.android.modules.expresslog.Counter
+com.android.modules.expresslog.Utils
 com.android.internal.graphics.ColorUtils$ContrastCalculator
 com.android.internal.graphics.ColorUtils
 com.android.internal.graphics.SfVsyncFrameCallbackProvider
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 7d81a95..ae63816 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -8,8 +8,6 @@
     field public static final String APPROVE_INCIDENT_REPORTS = "android.permission.APPROVE_INCIDENT_REPORTS";
     field public static final String BACKGROUND_CAMERA = "android.permission.BACKGROUND_CAMERA";
     field public static final String BIND_CELL_BROADCAST_SERVICE = "android.permission.BIND_CELL_BROADCAST_SERVICE";
-    field public static final String BODY_SENSORS_WRIST_TEMPERATURE = "android.permission.BODY_SENSORS_WRIST_TEMPERATURE";
-    field public static final String BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND = "android.permission.BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND";
     field public static final String BRIGHTNESS_SLIDER_USAGE = "android.permission.BRIGHTNESS_SLIDER_USAGE";
     field public static final String BROADCAST_CLOSE_SYSTEM_DIALOGS = "android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS";
     field public static final String CHANGE_APP_IDLE_STATE = "android.permission.CHANGE_APP_IDLE_STATE";
@@ -540,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();
@@ -779,6 +778,17 @@
 
 }
 
+package android.app.tare {
+
+  public class EconomyManager {
+    method public int getEnabledMode();
+    field public static final int ENABLED_MODE_OFF = 0; // 0x0
+    field public static final int ENABLED_MODE_SHADOW = 2; // 0x2
+    field public static final String KEY_ENABLE_TARE_MODE = "enable_tare_mode";
+  }
+
+}
+
 package android.app.usage {
 
   public class StorageStatsManager {
@@ -2065,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/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 1dddf06..9e59ee4 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -1450,9 +1450,8 @@
     public static final int OP_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD =
             AppProtoEnums.APP_OP_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD;
 
-    /** @hide Access to wrist temperature sensors. */
-    public static final int OP_BODY_SENSORS_WRIST_TEMPERATURE =
-            AppProtoEnums.APP_OP_BODY_SENSORS_WRIST_TEMPERATURE;
+    // App op deprecated/removed.
+    private static final int OP_DEPRECATED_2 = AppProtoEnums.APP_OP_BODY_SENSORS_WRIST_TEMPERATURE;
 
     /**
      * Send an intent to launch instead of posting the notification to the status bar.
@@ -1619,7 +1618,6 @@
             OPSTR_SYSTEM_EXEMPT_FROM_HIBERNATION,
             OPSTR_SYSTEM_EXEMPT_FROM_ACTIVITY_BG_START_RESTRICTION,
             OPSTR_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD,
-            OPSTR_BODY_SENSORS_WRIST_TEMPERATURE,
             OPSTR_USE_FULL_SCREEN_INTENT,
             OPSTR_CAMERA_SANDBOXED,
             OPSTR_RECORD_AUDIO_SANDBOXED
@@ -2221,11 +2219,10 @@
             "android:capture_consentless_bugreport_on_userdebug_build";
 
     /**
-     * Access to wrist temperature body sensors.
+     * App op deprecated/removed.
      * @hide
      */
-    public static final String OPSTR_BODY_SENSORS_WRIST_TEMPERATURE =
-            "android:body_sensors_wrist_temperature";
+    public static final String OPSTR_DEPRECATED_2 = "android:deprecated_2";
 
     /**
      * Send an intent to launch instead of posting the notification to the status bar.
@@ -2343,7 +2340,6 @@
             OP_READ_MEDIA_VISUAL_USER_SELECTED,
             OP_FOREGROUND_SERVICE_SPECIAL_USE,
             OP_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD,
-            OP_BODY_SENSORS_WRIST_TEMPERATURE,
             OP_USE_FULL_SCREEN_INTENT
     };
 
@@ -2551,7 +2547,7 @@
             .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
         new AppOpInfo.Builder(OP_TURN_SCREEN_ON, OPSTR_TURN_SCREEN_ON, "TURN_SCREEN_ON")
             .setPermission(Manifest.permission.TURN_SCREEN_ON)
-            .setDefaultMode(AppOpsManager.MODE_ERRORED).build(),
+            .setDefaultMode(AppOpsManager.MODE_DEFAULT).build(),
         new AppOpInfo.Builder(OP_GET_ACCOUNTS, OPSTR_GET_ACCOUNTS, "GET_ACCOUNTS")
             .setPermission(Manifest.permission.GET_ACCOUNTS)
             .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
@@ -2763,11 +2759,8 @@
                 "CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD")
                 .setPermission(Manifest.permission.CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD)
                 .build(),
-        new AppOpInfo.Builder(OP_BODY_SENSORS_WRIST_TEMPERATURE,
-                OPSTR_BODY_SENSORS_WRIST_TEMPERATURE,
-                "BODY_SENSORS_WRIST_TEMPERATURE")
-                .setPermission(Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE)
-                .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
+        new AppOpInfo.Builder(OP_DEPRECATED_2, OPSTR_DEPRECATED_2, "DEPRECATED_2")
+                .setDefaultMode(AppOpsManager.MODE_IGNORED).build(),
         new AppOpInfo.Builder(OP_USE_FULL_SCREEN_INTENT, OPSTR_USE_FULL_SCREEN_INTENT,
                 "USE_FULL_SCREEN_INTENT").setPermission(Manifest.permission.USE_FULL_SCREEN_INTENT)
                 .build(),
diff --git a/core/java/android/app/ForegroundServiceTypePolicy.java b/core/java/android/app/ForegroundServiceTypePolicy.java
index be012cf..c0c59a2 100644
--- a/core/java/android/app/ForegroundServiceTypePolicy.java
+++ b/core/java/android/app/ForegroundServiceTypePolicy.java
@@ -473,7 +473,6 @@
             new ForegroundServiceTypePermissions(new ForegroundServiceTypePermission[] {
                 new RegularPermission(Manifest.permission.ACTIVITY_RECOGNITION),
                 new RegularPermission(Manifest.permission.BODY_SENSORS),
-                new RegularPermission(Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE),
                 new RegularPermission(Manifest.permission.HIGH_SAMPLING_RATE_SENSORS),
             }, false),
             FGS_TYPE_PERM_ENFORCEMENT_FLAG_HEALTH /* permissionEnforcementFlag */,
diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl
index d62e15a..3249b41 100644
--- a/core/java/android/app/IActivityTaskManager.aidl
+++ b/core/java/android/app/IActivityTaskManager.aidl
@@ -174,6 +174,9 @@
     ActivityTaskManager.RootTaskInfo getFocusedRootTaskInfo();
     Rect getTaskBounds(int taskId);
 
+    /** Focuses the top task on a display if it isn't already focused. Used for Recents. */
+    void focusTopTask(int displayId);
+
     void cancelRecentsAnimation(boolean restoreHomeRootTaskPosition);
     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.UPDATE_LOCK_TASK_PACKAGES)")
     void updateLockTaskPackages(int userId, in String[] packages);
diff --git a/core/java/android/app/IWallpaperManager.aidl b/core/java/android/app/IWallpaperManager.aidl
index ee24263..2b15589 100644
--- a/core/java/android/app/IWallpaperManager.aidl
+++ b/core/java/android/app/IWallpaperManager.aidl
@@ -220,6 +220,20 @@
     void notifyGoingToSleep(int x, int y, in Bundle extras);
 
     /**
+     * Called when the screen has been fully turned on and is visible.
+     *
+     * @hide
+     */
+    void notifyScreenTurnedOn(int displayId);
+
+    /**
+     * Called when the screen starts turning on.
+     *
+     * @hide
+     */
+    void notifyScreenTurningOn(int displayId);
+
+    /**
      * Sets the wallpaper dim amount between [0f, 1f] which would be blended with the system default
      * dimming. 0f doesn't add any additional dimming and 1f makes the wallpaper fully black.
      *
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index c131ce5..e31486f 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -2354,8 +2354,7 @@
                 return mUiAutomation;
             }
             if (mustCreateNewAutomation) {
-                mUiAutomation = new UiAutomation(getTargetContext().getMainLooper(),
-                        mUiAutomationConnection);
+                mUiAutomation = new UiAutomation(getTargetContext(), mUiAutomationConnection);
             } else {
                 mUiAutomation.disconnect();
             }
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/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index 746dcb6..d8cedb8 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -44,6 +44,7 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlSerializer;
 
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.Arrays;
@@ -246,6 +247,7 @@
     private boolean mBypassDnd;
     private int mLockscreenVisibility = DEFAULT_VISIBILITY;
     private Uri mSound = Settings.System.DEFAULT_NOTIFICATION_URI;
+    private boolean mSoundRestored = false;
     private boolean mLights;
     private int mLightColor = DEFAULT_LIGHT_COLOR;
     private long[] mVibration;
@@ -929,8 +931,9 @@
     /**
      * @hide
      */
-    public void populateFromXmlForRestore(XmlPullParser parser, Context context) {
-        populateFromXml(XmlUtils.makeTyped(parser), true, context);
+    public void populateFromXmlForRestore(XmlPullParser parser, boolean pkgInstalled,
+            Context context) {
+        populateFromXml(XmlUtils.makeTyped(parser), true, pkgInstalled, context);
     }
 
     /**
@@ -938,14 +941,14 @@
      */
     @SystemApi
     public void populateFromXml(XmlPullParser parser) {
-        populateFromXml(XmlUtils.makeTyped(parser), false, null);
+        populateFromXml(XmlUtils.makeTyped(parser), false, true, null);
     }
 
     /**
      * If {@param forRestore} is true, {@param Context} MUST be non-null.
      */
     private void populateFromXml(TypedXmlPullParser parser, boolean forRestore,
-            @Nullable Context context) {
+            boolean pkgInstalled, @Nullable Context context) {
         Preconditions.checkArgument(!forRestore || context != null,
                 "forRestore is true but got null context");
 
@@ -956,7 +959,8 @@
         setLockscreenVisibility(safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY));
 
         Uri sound = safeUri(parser, ATT_SOUND);
-        setSound(forRestore ? restoreSoundUri(context, sound) : sound, safeAudioAttributes(parser));
+        setSound(forRestore ? restoreSoundUri(context, sound, pkgInstalled) : sound,
+                safeAudioAttributes(parser));
 
         enableLights(safeBool(parser, ATT_LIGHTS, false));
         setLightColor(safeInt(parser, ATT_LIGHT_COLOR, DEFAULT_LIGHT_COLOR));
@@ -978,8 +982,58 @@
         setImportantConversation(safeBool(parser, ATT_IMP_CONVERSATION, false));
     }
 
+    /**
+     * Returns whether the sound for this channel was successfully restored
+     *  from backup.
+     * @return false if the sound was not restored successfully. true otherwise (default value)
+     * @hide
+     */
+    public boolean isSoundRestored() {
+        return mSoundRestored;
+    }
+
     @Nullable
-    private Uri restoreSoundUri(Context context, @Nullable Uri uri) {
+    private Uri getCanonicalizedSoundUri(ContentResolver contentResolver, @NonNull Uri uri) {
+        if (Settings.System.DEFAULT_NOTIFICATION_URI.equals(uri)) {
+            return uri;
+        }
+
+        if (ContentResolver.SCHEME_ANDROID_RESOURCE.equals(uri.getScheme())) {
+            try {
+                contentResolver.getResourceId(uri);
+                return uri;
+            } catch (FileNotFoundException e) {
+                return null;
+            }
+        }
+
+        if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
+            return uri;
+        }
+
+        return contentResolver.canonicalize(uri);
+    }
+
+    @Nullable
+    private Uri getUncanonicalizedSoundUri(ContentResolver contentResolver, @NonNull Uri uri) {
+        if (Settings.System.DEFAULT_NOTIFICATION_URI.equals(uri)
+                || ContentResolver.SCHEME_ANDROID_RESOURCE.equals(uri.getScheme())
+                || ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
+            return uri;
+        }
+        return contentResolver.uncanonicalize(uri);
+    }
+
+    /**
+     * Restore/validate sound Uri from backup
+     * @param context The Context
+     * @param uri The sound Uri to restore
+     * @param pkgInstalled If the parent package is installed
+     * @return restored and validated Uri
+     * @hide
+     */
+    @Nullable
+    public Uri restoreSoundUri(Context context, @Nullable Uri uri, boolean pkgInstalled) {
         if (uri == null || Uri.EMPTY.equals(uri)) {
             return null;
         }
@@ -991,12 +1045,22 @@
         // the uri and in the case of not having the resource we end up with the default - better
         // than broken. As a side effect we'll canonicalize already canonicalized uris, this is fine
         // according to the docs because canonicalize method has to handle canonical uris as well.
-        Uri canonicalizedUri = contentResolver.canonicalize(uri);
+        Uri canonicalizedUri = getCanonicalizedSoundUri(contentResolver, uri);
         if (canonicalizedUri == null) {
-            // We got a null because the uri in the backup does not exist here, so we return default
-            return Settings.System.DEFAULT_NOTIFICATION_URI;
+            // Uri failed to restore with package installed
+            if (!mSoundRestored && pkgInstalled) {
+                mSoundRestored = true;
+                // We got a null because the uri in the backup does not exist here, so we return
+                // default
+                return Settings.System.DEFAULT_NOTIFICATION_URI;
+            } else {
+                // Flag as unrestored and try again later (on package install)
+                mSoundRestored = false;
+                return uri;
+            }
         }
-        return contentResolver.uncanonicalize(canonicalizedUri);
+        mSoundRestored = true;
+        return getUncanonicalizedSoundUri(contentResolver, canonicalizedUri);
     }
 
     /**
@@ -1019,7 +1083,7 @@
         if (sound == null || Uri.EMPTY.equals(sound)) {
             return null;
         }
-        Uri canonicalSound = context.getContentResolver().canonicalize(sound);
+        Uri canonicalSound = getCanonicalizedSoundUri(context.getContentResolver(), sound);
         if (canonicalSound == null) {
             // The content provider does not support canonical uris so we backup the default
             return Settings.System.DEFAULT_NOTIFICATION_URI;
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/TEST_MAPPING b/core/java/android/app/TEST_MAPPING
index 1df8602..bc5f7f4 100644
--- a/core/java/android/app/TEST_MAPPING
+++ b/core/java/android/app/TEST_MAPPING
@@ -110,6 +110,9 @@
             "options": [
                 {
                     "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-filter": "android.voiceinteraction.cts.HotwordDetectionServiceStressTest"
                 }
             ],
             "file_patterns": ["(/|^)VoiceInteract[^/]*"]
diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java
index 658e084..247d5bc 100644
--- a/core/java/android/app/UiAutomation.java
+++ b/core/java/android/app/UiAutomation.java
@@ -16,6 +16,8 @@
 
 package android.app;
 
+import static android.view.Display.DEFAULT_DISPLAY;
+
 import android.accessibilityservice.AccessibilityGestureEvent;
 import android.accessibilityservice.AccessibilityService;
 import android.accessibilityservice.AccessibilityService.Callbacks;
@@ -30,6 +32,7 @@
 import android.annotation.SuppressLint;
 import android.annotation.TestApi;
 import android.compat.annotation.UnsupportedAppUsage;
+import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Point;
 import android.graphics.Rect;
@@ -45,6 +48,7 @@
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.util.ArraySet;
 import android.util.DebugUtils;
 import android.util.Log;
@@ -69,8 +73,10 @@
 import android.view.inputmethod.EditorInfo;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.inputmethod.IAccessibilityInputMethodSessionCallback;
 import com.android.internal.inputmethod.RemoteAccessibilityInputConnection;
+import com.android.internal.util.Preconditions;
 import com.android.internal.util.function.pooled.PooledLambda;
 
 import libcore.io.IoUtils;
@@ -202,6 +208,8 @@
 
     private final IUiAutomationConnection mUiAutomationConnection;
 
+    private final int mDisplayId;
+
     private HandlerThread mRemoteCallbackThread;
 
     private IAccessibilityServiceClient mClient;
@@ -261,24 +269,49 @@
 
     /**
      * Creates a new instance that will handle callbacks from the accessibility
+     * layer on the thread of the provided context main looper and perform requests for privileged
+     * operations on the provided connection, and filtering display-related features to the display
+     * associated with the context (or the user running the test, on devices that
+     * {@link UserManager#isVisibleBackgroundUsersSupported() support visible background users}).
+     *
+     * @param context the context associated with the automation
+     * @param connection The connection for performing privileged operations.
+     *
+     * @hide
+     */
+    public UiAutomation(Context context, IUiAutomationConnection connection) {
+        this(getDisplayId(context), context.getMainLooper(), connection);
+    }
+
+    /**
+     * Creates a new instance that will handle callbacks from the accessibility
      * layer on the thread of the provided looper and perform requests for privileged
      * operations on the provided connection.
      *
      * @param looper The looper on which to execute accessibility callbacks.
      * @param connection The connection for performing privileged operations.
      *
+     * @deprecated use {@link #UiAutomation(Context, IUiAutomationConnection)} instead
+     *
      * @hide
      */
+    @Deprecated
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
     public UiAutomation(Looper looper, IUiAutomationConnection connection) {
-        if (looper == null) {
-            throw new IllegalArgumentException("Looper cannot be null!");
-        }
-        if (connection == null) {
-            throw new IllegalArgumentException("Connection cannot be null!");
-        }
+        this(DEFAULT_DISPLAY, looper, connection);
+        Log.w(LOG_TAG, "Created with deprecatead constructor, assumes DEFAULT_DISPLAY");
+    }
+
+    private UiAutomation(int displayId, Looper looper, IUiAutomationConnection connection) {
+        Preconditions.checkArgument(looper != null, "Looper cannot be null!");
+        Preconditions.checkArgument(connection != null, "Connection cannot be null!");
+
         mLocalCallbackHandler = new Handler(looper);
         mUiAutomationConnection = connection;
+        mDisplayId = displayId;
+
+        Log.i(LOG_TAG, "Initialized for user " + Process.myUserHandle().getIdentifier()
+                + " on display " + mDisplayId);
     }
 
     /**
@@ -719,8 +752,14 @@
     }
 
     /**
-     * Gets the windows on the screen of the default display. This method returns only the windows
-     * that a sighted user can interact with, as opposed to all windows.
+     * Gets the windows on the screen associated with the {@link UiAutomation} context (usually the
+     * {@link android.view.Display#DEFAULT_DISPLAY default display).
+     *
+     * <p>
+     * This method returns only the windows that a sighted user can interact with, as opposed to
+     * all windows.
+
+     * <p>
      * For example, if there is a modal dialog shown and the user cannot touch
      * anything behind it, then only the modal window will be reported
      * (assuming it is the top one). For convenience the returned windows
@@ -730,21 +769,23 @@
      * <strong>Note:</strong> In order to access the windows you have to opt-in
      * to retrieve the interactive windows by setting the
      * {@link AccessibilityServiceInfo#FLAG_RETRIEVE_INTERACTIVE_WINDOWS} flag.
-     * </p>
      *
      * @return The windows if there are windows such, otherwise an empty list.
      * @throws IllegalStateException If the connection to the accessibility subsystem is not
      *            established.
      */
     public List<AccessibilityWindowInfo> getWindows() {
+        if (DEBUG) {
+            Log.d(LOG_TAG, "getWindows(): returning windows for display " + mDisplayId);
+        }
         final int connectionId;
         synchronized (mLock) {
             throwIfNotConnectedLocked();
             connectionId = mConnectionId;
         }
         // Calling out without a lock held.
-        return AccessibilityInteractionClient.getInstance()
-                .getWindows(connectionId);
+        return AccessibilityInteractionClient.getInstance().getWindowsOnDisplay(connectionId,
+                mDisplayId);
     }
 
     /**
@@ -1112,8 +1153,10 @@
      * @return The screenshot bitmap on success, null otherwise.
      */
     public Bitmap takeScreenshot() {
-        Display display = DisplayManagerGlobal.getInstance()
-                .getRealDisplay(Display.DEFAULT_DISPLAY);
+        if (DEBUG) {
+            Log.d(LOG_TAG, "Taking screenshot of display " + mDisplayId);
+        }
+        Display display = DisplayManagerGlobal.getInstance().getRealDisplay(mDisplayId);
         Point displaySize = new Point();
         display.getRealSize(displaySize);
 
@@ -1126,10 +1169,12 @@
             screenShot = mUiAutomationConnection.takeScreenshot(
                     new Rect(0, 0, displaySize.x, displaySize.y));
             if (screenShot == null) {
+                Log.e(LOG_TAG, "mUiAutomationConnection.takeScreenshot() returned null for display "
+                        + mDisplayId);
                 return null;
             }
         } catch (RemoteException re) {
-            Log.e(LOG_TAG, "Error while taking screenshot!", re);
+            Log.e(LOG_TAG, "Error while taking screenshot of display " + mDisplayId, re);
             return null;
         }
 
@@ -1509,6 +1554,14 @@
         return executeShellCommandInternal(command, true /* includeStderr */);
     }
 
+    /**
+     * @hide
+     */
+    @VisibleForTesting
+    public int getDisplayId() {
+        return mDisplayId;
+    }
+
     private ParcelFileDescriptor[] executeShellCommandInternal(
             String command, boolean includeStderr) {
         warnIfBetterCommand(command);
@@ -1564,6 +1617,7 @@
         final StringBuilder stringBuilder = new StringBuilder();
         stringBuilder.append("UiAutomation@").append(Integer.toHexString(hashCode()));
         stringBuilder.append("[id=").append(mConnectionId);
+        stringBuilder.append(", displayId=").append(mDisplayId);
         stringBuilder.append(", flags=").append(mFlags);
         stringBuilder.append("]");
         return stringBuilder.toString();
@@ -1601,6 +1655,55 @@
         return (mFlags & UiAutomation.FLAG_DONT_USE_ACCESSIBILITY) == 0;
     }
 
+    /**
+     * Gets the display id associated with the UiAutomation context.
+     *
+     * <p><b>NOTE: </b> must be a static method because it's called from a constructor to call
+     * another one.
+     */
+    private static int getDisplayId(Context context) {
+        Preconditions.checkArgument(context != null, "Context cannot be null!");
+
+        UserManager userManager = context.getSystemService(UserManager.class);
+        // TODO(b/255426725): given that this is a temporary solution until a11y supports multiple
+        // users, the display is only set on devices that support that
+        if (!userManager.isVisibleBackgroundUsersSupported()) {
+            return DEFAULT_DISPLAY;
+        }
+
+        int displayId = context.getDisplayId();
+        if (displayId == Display.INVALID_DISPLAY) {
+            // Shouldn't happen, but we better handle it
+            Log.e(LOG_TAG, "UiAutomation created UI context with invalid display id, assuming it's"
+                    + " running in the display assigned to the user");
+            return getMainDisplayIdAssignedToUser(context, userManager);
+        }
+
+        if (displayId != DEFAULT_DISPLAY) {
+            if (DEBUG) {
+                Log.d(LOG_TAG, "getDisplayId(): returning context's display (" + displayId + ")");
+            }
+            // Context is explicitly setting the display, so we respect that...
+            return displayId;
+        }
+        // ...otherwise, we need to get the display the test's user is running on
+        int userDisplayId = getMainDisplayIdAssignedToUser(context, userManager);
+        if (DEBUG) {
+            Log.d(LOG_TAG, "getDisplayId(): returning user's display (" + userDisplayId + ")");
+        }
+        return userDisplayId;
+    }
+
+    private static int getMainDisplayIdAssignedToUser(Context context, UserManager userManager) {
+        if (!userManager.isUserVisible()) {
+            // Should also not happen, but ...
+            Log.e(LOG_TAG, "User (" + context.getUserId() + ") is not visible, using "
+                    + "DEFAULT_DISPLAY");
+            return DEFAULT_DISPLAY;
+        }
+        return userManager.getMainDisplayIdAssignedToUser();
+    }
+
     private class IAccessibilityServiceClientImpl extends IAccessibilityServiceClientWrapper {
 
         public IAccessibilityServiceClientImpl(Looper looper, int generationId) {
@@ -1621,6 +1724,7 @@
                     if (DEBUG) {
                         Log.d(LOG_TAG, "init(): connectionId=" + connectionId + ", windowToken="
                                 + windowToken + ", user=" + Process.myUserHandle()
+                                + ", UiAutomation.mDisplay=" + UiAutomation.this.mDisplayId
                                 + ", mGenerationId=" + mGenerationId
                                 + ", UiAutomation.mGenerationId="
                                 + UiAutomation.this.mGenerationId);
diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java
index 13e800e..d96a9d1 100644
--- a/core/java/android/app/UiAutomationConnection.java
+++ b/core/java/android/app/UiAutomationConnection.java
@@ -22,6 +22,7 @@
 import android.accessibilityservice.IAccessibilityServiceClient;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.UserIdInt;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.graphics.Bitmap;
@@ -117,7 +118,8 @@
                 throw new IllegalStateException("Already connected.");
             }
             mOwningUid = Binder.getCallingUid();
-            registerUiTestAutomationServiceLocked(client, flags);
+            registerUiTestAutomationServiceLocked(client,
+                    Binder.getCallingUserHandle().getIdentifier(), flags);
             storeRotationStateLocked();
         }
     }
@@ -553,7 +555,7 @@
     }
 
     private void registerUiTestAutomationServiceLocked(IAccessibilityServiceClient client,
-            int flags) {
+            @UserIdInt int userId, int flags) {
         IAccessibilityManager manager = IAccessibilityManager.Stub.asInterface(
                 ServiceManager.getService(Context.ACCESSIBILITY_SERVICE));
         final AccessibilityServiceInfo info = new AccessibilityServiceInfo();
@@ -571,10 +573,11 @@
         try {
             // Calling out with a lock held is fine since if the system
             // process is gone the client calling in will be killed.
-            manager.registerUiTestAutomationService(mToken, client, info, flags);
+            manager.registerUiTestAutomationService(mToken, client, info, userId, flags);
             mClient = client;
         } catch (RemoteException re) {
-            throw new IllegalStateException("Error while registering UiTestAutomationService.", re);
+            throw new IllegalStateException("Error while registering UiTestAutomationService for "
+                    + "user " + userId + ".", re);
         }
     }
 
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..7b68357 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -8394,8 +8394,7 @@
      * <p>
      * The calling device admin must have requested
      * {@link DeviceAdminInfo#USES_POLICY_DISABLE_CAMERA} to be able to call this method; if it has
-     * not, a security exception will be thrown, or the caller must hold the permission
-     * {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CAMERA}.
+     * not, a security exception will be thrown.
      * <p>
      * <b>Note</b>, this policy type is deprecated for legacy device admins since
      * {@link android.os.Build.VERSION_CODES#Q}. On Android
@@ -8411,8 +8410,7 @@
                      the caller is not a device admin
      * @param disabled Whether or not the camera should be disabled.
      * @throws SecurityException if {@code admin} is not an active administrator or does not use
-     *             {@link DeviceAdminInfo#USES_POLICY_DISABLE_CAMERA} and the caller does not hold
-     *             the permisisons {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_CAMERA}.
+     *             {@link DeviceAdminInfo#USES_POLICY_DISABLE_CAMERA}.
      */
     @RequiresPermission(value = MANAGE_DEVICE_POLICY_CAMERA, conditional = true)
     public void setCameraDisabled(@Nullable ComponentName admin, boolean disabled) {
@@ -16825,6 +16823,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/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 31c02b8..fa99b59 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -2085,7 +2085,8 @@
      *
      * @param uri The URI whose file is to be opened.
      * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw"
-     *             or "rwt". See{@link ParcelFileDescriptor#parseMode} for more details.
+     *             or "rwt". Please note the exact implementation of these may differ for each
+     *             Provider implementation - for example, "w" may or may not truncate.
      *
      * @return Returns a new ParcelFileDescriptor which you can use to access
      * the file.
@@ -2147,7 +2148,8 @@
      *
      * @param uri The URI whose file is to be opened.
      * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw"
-     *             or "rwt". See{@link ParcelFileDescriptor#parseMode} for more details.
+     *             or "rwt". Please note the exact implementation of these may differ for each
+     *             Provider implementation - for example, "w" may or may not truncate.
      * @param signal A signal to cancel the operation in progress, or
      *            {@code null} if none. For example, if you are downloading a
      *            file from the network to service a "rw" mode request, you
@@ -2208,7 +2210,8 @@
      *
      * @param uri The URI whose file is to be opened.
      * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw"
-     *             or "rwt". See{@link ParcelFileDescriptor#parseMode} for more details.
+     *             or "rwt". Please note the exact implementation of these may differ for each
+     *             Provider implementation - for example, "w" may or may not truncate.
      *
      * @return Returns a new AssetFileDescriptor which you can use to access
      * the file.
@@ -2262,7 +2265,8 @@
      *
      * @param uri The URI whose file is to be opened.
      * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw"
-     *             or "rwt". See{@link ParcelFileDescriptor#parseMode} for more details.
+     *             or "rwt". Please note the exact implementation of these may differ for each
+     *             Provider implementation - for example, "w" may or may not truncate.
      * @param signal A signal to cancel the operation in progress, or
      *            {@code null} if none. For example, if you are downloading a
      *            file from the network to service a "rw" mode request, you
@@ -2294,7 +2298,8 @@
      *
      * @param uri The URI to be opened.
      * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw"
-     *             or "rwt". See{@link ParcelFileDescriptor#parseMode} for more details.
+     *             or "rwt". Please note the exact implementation of these may differ for each
+     *             Provider implementation - for example, "w" may or may not truncate.
      *
      * @return Returns a new ParcelFileDescriptor that can be used by the
      * client to access the file.
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index feca7a0..b2cd7e9 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -1536,7 +1536,8 @@
 
     /**
      * Synonym for {@link #openOutputStream(Uri, String)
-     * openOutputStream(uri, "w")}.
+     * openOutputStream(uri, "w")}. Please note the implementation of "w" is up to each
+     * Provider implementation and it may or may not truncate.
      *
      * @param uri The desired URI.
      * @return an OutputStream or {@code null} if the provider recently crashed.
@@ -1562,7 +1563,8 @@
      *
      * @param uri The desired URI.
      * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw"
-     *             or "rwt". See{@link ParcelFileDescriptor#parseMode} for more details.
+     *             or "rwt". Please note the exact implementation of these may differ for each
+     *             Provider implementation - for example, "w" may or may not truncate.
      * @return an OutputStream or {@code null} if the provider recently crashed.
      * @throws FileNotFoundException if the provided URI could not be opened.
      * @see #openAssetFileDescriptor(Uri, String)
@@ -1619,7 +1621,8 @@
      *
      * @param uri The desired URI to open.
      * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw"
-     *             or "rwt". See{@link ParcelFileDescriptor#parseMode} for more details.
+     *             or "rwt". Please note the exact implementation of these may differ for each
+     *             Provider implementation - for example, "w" may or may not truncate.
      * @return Returns a new ParcelFileDescriptor pointing to the file or {@code null} if the
      * provider recently crashed. You own this descriptor and are responsible for closing it
      * when done.
@@ -1662,7 +1665,8 @@
      *
      * @param uri The desired URI to open.
      * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw"
-     *             or "rwt". See{@link ParcelFileDescriptor#parseMode} for more details.
+     *             or "rwt". Please note the exact implementation of these may differ for each
+     *             Provider implementation - for example, "w" may or may not truncate.
      * @param cancellationSignal A signal to cancel the operation in progress,
      *         or null if none. If the operation is canceled, then
      *         {@link OperationCanceledException} will be thrown.
@@ -1756,7 +1760,8 @@
      *
      * @param uri The desired URI to open.
      * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw"
-     *             or "rwt". See{@link ParcelFileDescriptor#parseMode} for more details.
+     *             or "rwt". Please note the exact implementation of these may differ for each
+     *             Provider implementation - for example, "w" may or may not truncate.
      * @return Returns a new ParcelFileDescriptor pointing to the file or {@code null} if the
      * provider recently crashed. You own this descriptor and are responsible for closing it
      * when done.
@@ -1810,7 +1815,8 @@
      *
      * @param uri The desired URI to open.
      * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw"
-     *             or "rwt". See{@link ParcelFileDescriptor#parseMode} for more details.
+     *             or "rwt". Please note "w" is write only and "wt" is write and truncate.
+     *             See{@link ParcelFileDescriptor#parseMode} for more details.
      * @param cancellationSignal A signal to cancel the operation in progress, or null if
      *            none. If the operation is canceled, then
      *            {@link OperationCanceledException} will be thrown.
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 2b73afc..c221d72 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -7613,7 +7613,7 @@
      * the device association is changed by the system.
      * <p>
      * The callback can be called when an app is moved to a different device and the {@code Context}
-     * is not explicily associated with a specific device.
+     * is not explicitly associated with a specific device.
      * </p>
      * <p> When an application receives a device id update callback, this Context is guaranteed to
      * also have an updated display ID(if any) and {@link Configuration}.
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/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index 5feda78..ad68866 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -1310,6 +1310,10 @@
      * {@link Surface}, submitting a reprocess {@link CaptureRequest} with multiple
      * output targets will result in a {@link CaptureFailure}.
      *
+     * From Android 14 onward, {@link CaptureRequest#CONTROL_CAPTURE_INTENT} will be set to
+     * {@link CameraMetadata#CONTROL_CAPTURE_INTENT_STILL_CAPTURE} by default. Prior to Android 14,
+     * apps will need to explicitly set this key themselves.
+     *
      * @param inputResult The capture result of the output image or one of the output images used
      *                       to generate the reprocess input image for this capture request.
      *
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index cb1efe8..f2d8caa 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -26,6 +26,7 @@
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CameraDevice;
 import android.hardware.camera2.CameraExtensionCharacteristics;
+import android.hardware.camera2.CameraMetadata;
 import android.hardware.camera2.CameraOfflineSession;
 import android.hardware.camera2.CaptureFailure;
 import android.hardware.camera2.CaptureRequest;
@@ -861,8 +862,13 @@
             CameraMetadataNative resultMetadata = new
                     CameraMetadataNative(inputResult.getNativeCopy());
 
-            return new CaptureRequest.Builder(resultMetadata, /*reprocess*/true,
-                    inputResult.getSessionId(), getId(), /*physicalCameraIdSet*/ null);
+            CaptureRequest.Builder builder = new CaptureRequest.Builder(resultMetadata,
+                    /*reprocess*/true, inputResult.getSessionId(), getId(),
+                    /*physicalCameraIdSet*/ null);
+            builder.set(CaptureRequest.CONTROL_CAPTURE_INTENT,
+                    CameraMetadata.CONTROL_CAPTURE_INTENT_STILL_CAPTURE);
+
+            return builder;
         }
     }
 
diff --git a/core/java/android/hardware/camera2/impl/CameraExtensionJpegProcessor.java b/core/java/android/hardware/camera2/impl/CameraExtensionJpegProcessor.java
index 7701125..875550a 100644
--- a/core/java/android/hardware/camera2/impl/CameraExtensionJpegProcessor.java
+++ b/core/java/android/hardware/camera2/impl/CameraExtensionJpegProcessor.java
@@ -46,6 +46,7 @@
 public class CameraExtensionJpegProcessor implements ICaptureProcessorImpl {
     public final static String TAG = "CameraExtensionJpeg";
     private final static int JPEG_QUEUE_SIZE = 1;
+    private final static int JPEG_APP_SEGMENT_SIZE = 64 * 1024;
 
     private final Handler mHandler;
     private final HandlerThread mHandlerThread;
@@ -243,9 +244,10 @@
     private void initializePipeline() throws RemoteException {
         if ((mFormat != -1) && (mOutputSurface != null) && (mResolution != null) &&
                 (mYuvReader == null)) {
-            // Jpeg/blobs are expected to be configured with (w*h)x1
+            // Jpeg/blobs are expected to be configured with (w*h)x1.5 + 64k Jpeg APP1 segment
             mOutputWriter = ImageWriter.newInstance(mOutputSurface, 1 /*maxImages*/,
-                    ImageFormat.JPEG, mResolution.width * mResolution.height, 1);
+                    ImageFormat.JPEG,
+                    (mResolution.width * mResolution.height * 3)/2 + JPEG_APP_SEGMENT_SIZE, 1);
             mYuvReader = ImageReader.newInstance(mResolution.width, mResolution.height, mFormat,
                     JPEG_QUEUE_SIZE);
             mYuvReader.setOnImageAvailableListener(
diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java
index 2aead3c..b453304 100644
--- a/core/java/android/hardware/display/DisplayManager.java
+++ b/core/java/android/hardware/display/DisplayManager.java
@@ -51,12 +51,18 @@
 import android.view.Surface;
 
 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;
 
 
 /**
@@ -81,9 +87,8 @@
     private final DisplayManagerGlobal mGlobal;
 
     private final Object mLock = new Object();
-    private final SparseArray<Display> mDisplays = new SparseArray<Display>();
-
-    private final ArrayList<Display> mTempDisplays = new ArrayList<Display>();
+    @GuardedBy("mLock")
+    private final WeakDisplayCache mDisplayCache = new WeakDisplayCache();
 
     /**
      * Broadcast receiver that indicates when the Wifi display status changes.
@@ -623,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*/);
     }
 
     /**
@@ -657,72 +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;
     }
 
-    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);
-            }
-        }
-    }
-
-    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;
         }
     }
 
-    private Display getOrCreateDisplayLocked(int displayId, boolean assumeValid) {
-        Display display = mDisplays.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) {
-                mDisplays.put(displayId, 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;
     }
@@ -1767,4 +1765,57 @@
          */
         String KEY_BRIGHTNESS_THROTTLING_DATA = "brightness_throttling_data";
     }
+
+    /**
+     * Helper class to maintain cache of weak references to Display instances.
+     *
+     * Note this class is not thread-safe, so external synchronization is needed if accessed
+     * concurrently.
+     */
+    private static final class WeakDisplayCache {
+        private final SparseArray<WeakReference<Display>> mDisplayCache = new SparseArray<>();
+
+        /**
+         * Return cached {@link Display} instance for the provided display id.
+         *
+         * @param displayId - display id of the requested {@link Display} instance.
+         * @return cached {@link Display} instance or null
+         */
+        Display get(int displayId) {
+            WeakReference<Display> wrDisplay = mDisplayCache.get(displayId);
+            if (wrDisplay == null) {
+                return null;
+            }
+            return wrDisplay.get();
+        }
+
+        /**
+         * Insert new {@link Display} instance in the cache. This replaced the previously cached
+         * {@link Display} instance, if there's already one with the same display id.
+         *
+         * @param display - Display instance to cache.
+         */
+        void put(Display display) {
+            removeStaleEntries();
+            mDisplayCache.put(display.getDisplayId(), new WeakReference<>(display));
+        }
+
+        /**
+         * Evict gc-ed entries from the cache.
+         */
+        private void removeStaleEntries() {
+            ArrayList<Integer> staleEntriesIndices = new ArrayList();
+            for (int i = 0; i < mDisplayCache.size(); i++) {
+                if (mDisplayCache.valueAt(i).get() == null) {
+                    staleEntriesIndices.add(i);
+                }
+            }
+
+            for (int i = 0; i < staleEntriesIndices.size(); i++) {
+                // removeAt call to SparseArray doesn't compact the underlying array
+                // so the indices stay valid even after removal.
+                mDisplayCache.removeAt(staleEntriesIndices.get(i));
+            }
+        }
+    }
 }
diff --git a/core/java/android/hardware/face/FaceManager.java b/core/java/android/hardware/face/FaceManager.java
index 55b20e1..0221296 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,21 @@
             return;
         }
 
+        if (hardwareAuthToken == null) {
+            callback.onEnrollmentError(FACE_ERROR_UNABLE_TO_PROCESS,
+                    getErrorString(mContext, FACE_ERROR_UNABLE_TO_PROCESS,
+                    0 /* vendorCode */));
+            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..01977f6 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -712,6 +712,13 @@
             return;
         }
 
+        if (hardwareAuthToken == null) {
+            callback.onEnrollmentError(FINGERPRINT_ERROR_UNABLE_TO_PROCESS,
+                    getErrorString(mContext, FINGERPRINT_ERROR_UNABLE_TO_PROCESS,
+                            0 /* vendorCode */));
+            return;
+        }
+
         if (mService != null) {
             try {
                 mEnrollmentCallback = callback;
@@ -832,7 +839,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/soundtrigger/IRecognitionStatusCallback.aidl b/core/java/android/hardware/soundtrigger/IRecognitionStatusCallback.aidl
index dcc3369..4663730 100644
--- a/core/java/android/hardware/soundtrigger/IRecognitionStatusCallback.aidl
+++ b/core/java/android/hardware/soundtrigger/IRecognitionStatusCallback.aidl
@@ -42,12 +42,6 @@
     void onGenericSoundTriggerDetected(in SoundTrigger.GenericRecognitionEvent recognitionEvent);
 
     /**
-     * Called when the detection fails due to an error.
-     *
-     * @param status The error code that was seen.
-     */
-    void onError(int status);
-    /**
      * Called when the recognition is paused temporarily for some reason.
      */
     void onRecognitionPaused();
@@ -55,4 +49,28 @@
      * Called when the recognition is resumed after it was temporarily paused.
      */
     void onRecognitionResumed();
+
+    // Error callbacks to follow
+    /**
+     * Called when this recognition has been preempted by another.
+     */
+    void onPreempted();
+
+    /**
+     * Called when the underlying ST module service has died.
+     */
+    void onModuleDied();
+
+    /**
+     * Called when the service failed to gracefully resume recognition following a pause.
+     * @param status - The received error code.
+     */
+    void onResumeFailed(int status);
+
+    /**
+     * Called when the service failed to pause recognition when required.
+     * TODO(b/276507281) Remove. This should never happen, so we should abort instead.
+     * @param status - The received error code.
+     */
+    void onPauseFailed(int status);
 }
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/inputmethodservice/InkWindow.java b/core/java/android/inputmethodservice/InkWindow.java
index 15ed450..24d1c95 100644
--- a/core/java/android/inputmethodservice/InkWindow.java
+++ b/core/java/android/inputmethodservice/InkWindow.java
@@ -195,6 +195,7 @@
         Objects.requireNonNull(decor);
         final ViewRootImpl viewRoot = decor.getViewRootImpl();
         Objects.requireNonNull(viewRoot);
-        viewRoot.enqueueInputEvent(event);
+        // The view root will own the event that we enqueue, so provide a copy of the event.
+        viewRoot.enqueueInputEvent(MotionEvent.obtain(event));
     }
 }
diff --git a/core/java/android/nfc/tech/NdefFormatable.java b/core/java/android/nfc/tech/NdefFormatable.java
index f19d302..2240fe7 100644
--- a/core/java/android/nfc/tech/NdefFormatable.java
+++ b/core/java/android/nfc/tech/NdefFormatable.java
@@ -124,6 +124,9 @@
         try {
             int serviceHandle = mTag.getServiceHandle();
             INfcTag tagService = mTag.getTagService();
+            if (tagService == null) {
+                throw new IOException();
+            }
             int errorCode = tagService.formatNdef(serviceHandle, MifareClassic.KEY_DEFAULT);
             switch (errorCode) {
                 case ErrorCodes.SUCCESS:
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index 9f9c222..7383e63 100755
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -493,7 +493,7 @@
          * @hide
          */
         @TestApi
-        public static final int RESOURCES_SDK_INT = SDK_INT + ACTIVE_CODENAMES.length;
+        public static final int RESOURCES_SDK_INT = SDK_INT;
 
         /**
          * The current lowest supported value of app target SDK. Applications targeting
diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java
index a52e3d49..2c31e32 100644
--- a/core/java/android/os/GraphicsEnvironment.java
+++ b/core/java/android/os/GraphicsEnvironment.java
@@ -213,6 +213,13 @@
     }
 
     /**
+     * Switch the system to use ANGLE as the default GLES driver.
+     */
+    public void toggleAngleAsSystemDriver(boolean enabled) {
+        nativeToggleAngleAsSystemDriver(enabled);
+    }
+
+    /**
      * Query to determine if the Game Mode has enabled ANGLE.
      */
     private boolean isAngleEnabledByGameMode(Context context, String packageName) {
@@ -992,6 +999,7 @@
             String appPackage, boolean angleIsSystemDriver, String legacyDriverName);
     private static native boolean getShouldUseAngle(String packageName);
     private static native boolean setInjectLayersPrSetDumpable();
+    private static native void nativeToggleAngleAsSystemDriver(boolean enabled);
 
     /**
      * Hint for GraphicsEnvironment that an activity is launching on the process.
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/os/image/DynamicSystemClient.java b/core/java/android/os/image/DynamicSystemClient.java
index 63259ed..218ecc8 100644
--- a/core/java/android/os/image/DynamicSystemClient.java
+++ b/core/java/android/os/image/DynamicSystemClient.java
@@ -202,6 +202,13 @@
     public static final String ACTION_NOTIFY_IF_IN_USE =
             "android.os.image.action.NOTIFY_IF_IN_USE";
 
+    /**
+     * Intent action: hide notifications about the status of {@code DynamicSystem}.
+     * @hide
+     */
+    public static final String ACTION_HIDE_NOTIFICATION =
+            "android.os.image.action.HIDE_NOTIFICATION";
+
     /*
      * Intent Keys
      */
@@ -217,6 +224,28 @@
      */
     public static final String KEY_USERDATA_SIZE = "KEY_USERDATA_SIZE";
 
+    /**
+     * Intent key: Whether to enable DynamicSystem immediately after installation is done.
+     *             Note this will reboot the device automatically.
+     * @hide
+     */
+    public static final String KEY_ENABLE_WHEN_COMPLETED = "KEY_ENABLE_WHEN_COMPLETED";
+
+    /**
+     * Intent key: Whether to leave DynamicSystem on device reboot.
+     *             False indicates a sticky mode where device stays in DynamicSystem across reboots.
+     * @hide
+     */
+    public static final String KEY_ONE_SHOT = "KEY_ONE_SHOT";
+
+    /**
+     * Intent key: Whether to use default strings when showing the dialog that prompts
+     *             user for device credentials.
+     *             False indicates using the custom strings provided by {@code DynamicSystem}.
+     * @hide
+     */
+    public static final String KEY_KEYGUARD_USE_DEFAULT_STRINGS =
+            "KEY_KEYGUARD_USE_DEFAULT_STRINGS";
 
     private static class IncomingHandler extends Handler {
         private final WeakReference<DynamicSystemClient> mWeakClient;
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 7cb959d..3487b01 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
@@ -2585,7 +2600,7 @@
      * <p>
      * To start an activity with this intent, apps should set the wellbeing package explicitly in
      * the intent together with this action. The wellbeing package is defined in
-     * {@code com.android.internal.R.string.config_defaultWellbeingPackage}.
+     * {@code com.android.internal.R.string.config_systemWellbeing}.
      * <p>
      * Output: Nothing
      *
@@ -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 {
@@ -4653,22 +4677,16 @@
                 "display_color_mode_vendor_hint";
 
         /**
-         * The user selected min refresh rate in frames per second.
-         *
-         * If this isn't set, 0 will be used.
+         * Whether or not the peak refresh rate should be forced. 0=no, 1=yes
          * @hide
          */
-        @Readable
-        public static final String MIN_REFRESH_RATE = "min_refresh_rate";
+        public static final String FORCE_PEAK_REFRESH_RATE = "force_peak_refresh_rate";
 
         /**
-         * The user selected peak refresh rate in frames per second.
-         *
-         * If this isn't set, the system falls back to a device specific default.
+         * Whether or not the peak refresh rate should be used for some content. 0=no, 1=yes
          * @hide
          */
-        @Readable
-        public static final String PEAK_REFRESH_RATE = "peak_refresh_rate";
+        public static final String SMOOTH_DISPLAY = "smooth_display";
 
         /**
          * The amount of time in milliseconds before the device goes to sleep or begins
@@ -10178,9 +10196,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 +14907,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 d2a4a66..1a1df6f 100644
--- a/core/java/android/service/credentials/CredentialProviderInfoFactory.java
+++ b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
@@ -42,7 +42,6 @@
 import android.os.UserHandle;
 import android.text.TextUtils;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.util.Slog;
 import android.util.Xml;
 
@@ -54,7 +53,6 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -167,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);
     }
 
@@ -181,7 +178,8 @@
         if (disableSystemAppVerificationForTests) {
             Bundle metadata = serviceInfo.metaData;
             if (metadata == null) {
-                Slog.e(TAG, "isValidSystemProvider - metadata is null: " + serviceInfo);
+                Slog.w(TAG, "metadata is null while reading "
+                        + "TEST_SYSTEM_PROVIDER_META_DATA_KEY: " + serviceInfo);
                 return false;
             }
             return metadata.getBoolean(
@@ -200,7 +198,7 @@
         // 1. Get the metadata for the service.
         final Bundle metadata = serviceInfo.metaData;
         if (metadata == null) {
-            Log.i(TAG, "populateMetadata - metadata is null");
+            Slog.w(TAG, "Metadata is null for provider: " + serviceInfo.getComponentName());
             return builder;
         }
 
@@ -209,12 +207,13 @@
         try {
             resources = pm.getResourcesForApplication(serviceInfo.applicationInfo);
         } catch (PackageManager.NameNotFoundException e) {
-            Log.e(TAG, "Failed to get app resources", e);
+            Slog.e(TAG, "Failed to get app resources", e);
         }
 
         // 3. Stop if we are missing data.
-        if (metadata == null || resources == null) {
-            Log.i(TAG, "populateMetadata - resources is null");
+        if (resources == null) {
+            Slog.w(TAG, "Resources are null for the serviceInfo being processed: "
+                    + serviceInfo.getComponentName());
             return builder;
         }
 
@@ -222,7 +221,7 @@
         try {
             builder = extractXmlMetadata(context, builder, serviceInfo, pm, resources);
         } catch (Exception e) {
-            Log.e(TAG, "Failed to get XML metadata", e);
+            Slog.e(TAG, "Failed to get XML metadata", e);
         }
 
         return builder;
@@ -259,7 +258,7 @@
                             afsAttributes.getString(
                                     R.styleable.CredentialProvider_settingsSubtitle));
                 } catch (Exception e) {
-                    Log.e(TAG, "Failed to get XML attr", e);
+                    Slog.e(TAG, "Failed to get XML attr", e);
                 } finally {
                     if (afsAttributes != null) {
                         afsAttributes.recycle();
@@ -267,10 +266,10 @@
                 }
                 builder.addCapabilities(parseXmlProviderOuterCapabilities(parser, resources));
             } else {
-                Log.e(TAG, "Meta-data does not start with credential-provider-service tag");
+                Slog.w(TAG, "Meta-data does not start with credential-provider-service tag");
             }
         } catch (IOException | XmlPullParserException e) {
-            Log.e(TAG, "Error parsing credential provider service meta-data", e);
+            Slog.e(TAG, "Error parsing credential provider service meta-data", e);
         }
 
         return builder;
@@ -329,7 +328,7 @@
                 return si;
             }
         } catch (RemoteException e) {
-            Slog.v(TAG, e.getMessage());
+            Slog.e(TAG, "Unable to get serviceInfo", e);
         }
         throw new PackageManager.NameNotFoundException(serviceComponent.toString());
     }
@@ -377,10 +376,8 @@
                 }
 
                 services.add(serviceInfo);
-            } catch (SecurityException e) {
-                Slog.e(TAG, "Error getting info for " + serviceInfo + ": " + e);
-            } catch (PackageManager.NameNotFoundException e) {
-                Slog.e(TAG, "Error getting info for " + serviceInfo + ": " + e);
+            } catch (SecurityException | PackageManager.NameNotFoundException e) {
+                Slog.e(TAG, "Error getting info for " + serviceInfo, e);
             }
         }
         return services;
@@ -432,7 +429,7 @@
             return pp;
         } catch (SecurityException e) {
             // If the current user is not enrolled in DPM then this can throw a security error.
-            Log.e(TAG, "Failed to get device policy: " + e);
+            Slog.e(TAG, "Failed to get device policy: " + e);
         }
 
         return null;
@@ -593,7 +590,7 @@
         for (ResolveInfo resolveInfo : resolveInfos) {
             final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
             if (serviceInfo == null) {
-                Log.i(TAG, "No serviceInfo found for resolveInfo so skipping this provider");
+                Slog.d(TAG, "No serviceInfo found for resolveInfo, so skipping provider");
                 continue;
             }
 
@@ -608,10 +605,8 @@
                 if (!cpi.isSystemProvider()) {
                     services.add(cpi);
                 }
-            } catch (SecurityException e) {
-                Slog.e(TAG, "Error getting info for " + serviceInfo + ": " + e);
             } catch (Exception e) {
-                Slog.e(TAG, "Error getting info for " + serviceInfo + ": " + e);
+                Slog.e(TAG, "Error getting info for " + serviceInfo, e);
             }
         }
         return services;
diff --git a/core/java/android/service/credentials/CredentialProviderService.java b/core/java/android/service/credentials/CredentialProviderService.java
index e87333f..53a5fd5 100644
--- a/core/java/android/service/credentials/CredentialProviderService.java
+++ b/core/java/android/service/credentials/CredentialProviderService.java
@@ -226,7 +226,7 @@
         if (SERVICE_INTERFACE.equals(intent.getAction())) {
             return mInterface.asBinder();
         }
-        Log.i(TAG, "Failed to bind with intent: " + intent);
+        Log.d(TAG, "Failed to bind with intent: " + intent);
         return null;
     }
 
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/dreams/DreamManagerInternal.java b/core/java/android/service/dreams/DreamManagerInternal.java
index dd5373f..82571db 100644
--- a/core/java/android/service/dreams/DreamManagerInternal.java
+++ b/core/java/android/service/dreams/DreamManagerInternal.java
@@ -80,10 +80,10 @@
      */
     public interface DreamManagerStateListener {
         /**
-         * Called when keep dreaming when undocked has changed.
+         * Called when keep dreaming when plug has changed.
          *
          * @param keepDreaming True if the current dream should continue when undocking.
          */
-        void onKeepDreamingWhenUndockedChanged(boolean keepDreaming);
+        void onKeepDreamingWhenUnpluggingChanged(boolean keepDreaming);
     }
 }
diff --git a/core/java/android/service/voice/AlwaysOnHotwordDetector.java b/core/java/android/service/voice/AlwaysOnHotwordDetector.java
index 8688a18..24c96ea 100644
--- a/core/java/android/service/voice/AlwaysOnHotwordDetector.java
+++ b/core/java/android/service/voice/AlwaysOnHotwordDetector.java
@@ -1573,16 +1573,6 @@
         }
 
         @Override
-        public void onError(int status) {
-            Slog.i(TAG, "onError: " + status);
-            // TODO(b/271534248): This is a workaround before the sound trigger uses the new error
-            // method.
-            Message.obtain(mHandler, MSG_DETECTION_SOUND_TRIGGER_FAILURE,
-                    new SoundTriggerFailure(SoundTriggerFailure.ERROR_CODE_UNKNOWN,
-                            "Sound trigger error")).sendToTarget();
-        }
-
-        @Override
         public void onHotwordDetectionServiceFailure(
                 HotwordDetectionServiceFailure hotwordDetectionServiceFailure) {
             Slog.v(TAG, "onHotwordDetectionServiceFailure: " + hotwordDetectionServiceFailure);
@@ -1605,6 +1595,12 @@
         }
 
         @Override
+        public void onSoundTriggerFailure(SoundTriggerFailure soundTriggerFailure) {
+            Message.obtain(mHandler, MSG_DETECTION_SOUND_TRIGGER_FAILURE,
+                    Objects.requireNonNull(soundTriggerFailure)).sendToTarget();
+        }
+
+        @Override
         public void onUnknownFailure(String errorMessage) throws RemoteException {
             Slog.v(TAG, "onUnknownFailure: " + errorMessage);
             Message.obtain(mHandler, MSG_DETECTION_UNKNOWN_FAILURE,
diff --git a/core/java/android/service/voice/SoftwareHotwordDetector.java b/core/java/android/service/voice/SoftwareHotwordDetector.java
index eac7aee..7ab4faf 100644
--- a/core/java/android/service/voice/SoftwareHotwordDetector.java
+++ b/core/java/android/service/voice/SoftwareHotwordDetector.java
@@ -234,14 +234,6 @@
         }
 
         @Override
-        public void onError(int status) throws RemoteException {
-            if (DEBUG) {
-                Slog.i(TAG, "Ignored #onError (" + status + ") event");
-            }
-            // TODO: Check if we still need to implement this method with DetectorFailure mechanism.
-        }
-
-        @Override
         public void onHotwordDetectionServiceFailure(
                 HotwordDetectionServiceFailure hotwordDetectionServiceFailure)
                 throws RemoteException {
@@ -265,6 +257,13 @@
         }
 
         @Override
+        public void onSoundTriggerFailure(SoundTriggerFailure onSoundTriggerFailure)
+                throws RemoteException {
+            // It should never be called here.
+            Slog.wtf(TAG, "Unexpected STFailure in software detector: " + onSoundTriggerFailure);
+        }
+
+        @Override
         public void onUnknownFailure(String errorMessage) throws RemoteException {
             Slog.v(TAG, "onUnknownFailure: " + errorMessage);
             Binder.withCleanCallingIdentity(() -> mExecutor.execute(() -> {
diff --git a/core/java/android/service/voice/SoundTriggerFailure.java b/core/java/android/service/voice/SoundTriggerFailure.java
index 5560800..2ce5e5d 100644
--- a/core/java/android/service/voice/SoundTriggerFailure.java
+++ b/core/java/android/service/voice/SoundTriggerFailure.java
@@ -73,18 +73,28 @@
     @Retention(RetentionPolicy.SOURCE)
     public @interface SoundTriggerErrorCode {}
 
-    private int mErrorCode = ERROR_CODE_UNKNOWN;
-    private String mErrorMessage = "Unknown";
+    private final int mErrorCode;
+    private final String mErrorMessage;
 
     /**
      * @hide
      */
     @TestApi
-    public SoundTriggerFailure(int errorCode, @NonNull String errorMessage) {
+    public SoundTriggerFailure(@SoundTriggerErrorCode int errorCode,
+            @NonNull String errorMessage) {
         if (TextUtils.isEmpty(errorMessage)) {
             throw new IllegalArgumentException("errorMessage is empty or null.");
         }
-        mErrorCode = errorCode;
+        switch (errorCode) {
+            case ERROR_CODE_UNKNOWN:
+            case ERROR_CODE_MODULE_DIED:
+            case ERROR_CODE_RECOGNITION_RESUME_FAILED:
+            case ERROR_CODE_UNEXPECTED_PREEMPTION:
+                mErrorCode = errorCode;
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid ErrorCode: " + errorCode);
+        }
         mErrorMessage = errorMessage;
     }
 
@@ -110,13 +120,14 @@
     @FailureSuggestedAction.FailureSuggestedActionDef
     public int getSuggestedAction() {
         switch (mErrorCode) {
+            case ERROR_CODE_UNKNOWN:
             case ERROR_CODE_MODULE_DIED:
             case ERROR_CODE_UNEXPECTED_PREEMPTION:
                 return FailureSuggestedAction.RECREATE_DETECTOR;
             case ERROR_CODE_RECOGNITION_RESUME_FAILED:
                 return FailureSuggestedAction.RESTART_RECOGNITION;
             default:
-                return FailureSuggestedAction.NONE;
+                throw new AssertionError("Unexpected error code");
         }
     }
 
diff --git a/core/java/android/service/voice/VisualQueryDetector.java b/core/java/android/service/voice/VisualQueryDetector.java
index b4f5ff1..93b7964 100644
--- a/core/java/android/service/voice/VisualQueryDetector.java
+++ b/core/java/android/service/voice/VisualQueryDetector.java
@@ -391,12 +391,6 @@
         }
 
         @Override
-        public void onError(int status) throws RemoteException {
-            Slog.v(TAG, "Initialization Error: (" + status + ")");
-            // Do nothing
-        }
-
-        @Override
         public void onHotwordDetectionServiceFailure(
                 HotwordDetectionServiceFailure hotwordDetectionServiceFailure)
                 throws RemoteException {
@@ -420,6 +414,11 @@
         }
 
         @Override
+        public void onSoundTriggerFailure(SoundTriggerFailure soundTriggerFailure) {
+            Slog.wtf(TAG, "Unexpected STFailure in VisualQueryDetector" + soundTriggerFailure);
+        }
+
+        @Override
         public void onUnknownFailure(String errorMessage) throws RemoteException {
             Slog.v(TAG, "onUnknownFailure: " + errorMessage);
             Binder.withCleanCallingIdentity(() -> mExecutor.execute(() -> {
diff --git a/core/java/android/service/wallpaper/IWallpaperEngine.aidl b/core/java/android/service/wallpaper/IWallpaperEngine.aidl
index 4c51be0..f1ae22e 100644
--- a/core/java/android/service/wallpaper/IWallpaperEngine.aidl
+++ b/core/java/android/service/wallpaper/IWallpaperEngine.aidl
@@ -32,6 +32,8 @@
     oneway void setDisplayPadding(in Rect padding);
     @UnsupportedAppUsage
     oneway void setVisibility(boolean visible);
+    oneway void onScreenTurningOn();
+    oneway void onScreenTurnedOn();
     oneway void setInAmbientMode(boolean inAmbientDisplay, long animationDuration);
     @UnsupportedAppUsage
     oneway void dispatchPointer(in MotionEvent event);
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 0b947fc..8d84e44 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -112,6 +112,7 @@
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Supplier;
 
 /**
@@ -168,6 +169,7 @@
     private static final int MSG_ZOOM = 10100;
     private static final int MSG_RESIZE_PREVIEW = 10110;
     private static final int MSG_REPORT_SHOWN = 10150;
+    private static final int MSG_UPDATE_SCREEN_TURNING_ON = 10170;
     private static final int MSG_UPDATE_DIMMING = 10200;
     private static final int MSG_WALLPAPER_FLAGS_CHANGED = 10210;
 
@@ -213,6 +215,16 @@
 
         boolean mInitializing = true;
         boolean mVisible;
+        /**
+         * Whether the screen is turning on.
+         * After the display is powered on, brightness is initially off. It is turned on only after
+         * all windows have been drawn, and sysui notifies that it's ready (See
+         * {@link com.android.internal.policy.IKeyguardDrawnCallback}).
+         * As some wallpapers use visibility as a signal to start animations, this makes sure
+         * {@link Engine#onVisibilityChanged} is invoked only when the display is both on and
+         * visible (with brightness on).
+         */
+        private boolean mIsScreenTurningOn;
         boolean mReportedVisible;
         boolean mDestroyed;
         // Set to true after receiving WallpaperManager#COMMAND_FREEZE. It's reset back to false
@@ -420,6 +432,7 @@
                 Message msg = mCaller.obtainMessageIO(MSG_WINDOW_RESIZED,
                         reportDraw ? 1 : 0,
                         mergedConfiguration);
+                mIWallpaperEngine.mPendingResizeCount.incrementAndGet();
                 mCaller.sendMessage(msg);
             }
 
@@ -1018,6 +1031,7 @@
                     out.print(" mDestroyed="); out.println(mDestroyed);
             out.print(prefix); out.print("mVisible="); out.print(mVisible);
                     out.print(" mReportedVisible="); out.println(mReportedVisible);
+                    out.print(" mIsScreenTurningOn="); out.println(mIsScreenTurningOn);
             out.print(prefix); out.print("mDisplay="); out.println(mDisplay);
             out.print(prefix); out.print("mCreated="); out.print(mCreated);
                     out.print(" mSurfaceCreated="); out.print(mSurfaceCreated);
@@ -1039,6 +1053,10 @@
             out.print(prefix); out.print("mZoom="); out.println(mZoom);
             out.print(prefix); out.print("mPreviewSurfacePosition=");
                     out.println(mPreviewSurfacePosition);
+            final int pendingCount = mIWallpaperEngine.mPendingResizeCount.get();
+            if (pendingCount != 0) {
+                out.print(prefix); out.print("mPendingResizeCount="); out.println(pendingCount);
+            }
             synchronized (mLock) {
                 out.print(prefix); out.print("mPendingXOffset="); out.print(mPendingXOffset);
                         out.print(" mPendingXOffset="); out.println(mPendingXOffset);
@@ -1101,10 +1119,6 @@
             }
         }
 
-        private void updateConfiguration(MergedConfiguration mergedConfiguration) {
-            mMergedConfiguration.setTo(mergedConfiguration);
-        }
-
         void updateSurface(boolean forceRelayout, boolean forceReport, boolean redrawNeeded) {
             if (mDestroyed) {
                 Log.w(TAG, "Ignoring updateSurface due to destroyed");
@@ -1153,7 +1167,7 @@
                             | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 
                     final Configuration config = mMergedConfiguration.getMergedConfiguration();
-                    final Rect maxBounds = config.windowConfiguration.getMaxBounds();
+                    final Rect maxBounds = new Rect(config.windowConfiguration.getMaxBounds());
                     if (myWidth == ViewGroup.LayoutParams.MATCH_PARENT
                             && myHeight == ViewGroup.LayoutParams.MATCH_PARENT) {
                         mLayout.width = myWidth;
@@ -1209,6 +1223,17 @@
                     final int relayoutResult = mSession.relayout(mWindow, mLayout, mWidth, mHeight,
                             View.VISIBLE, 0, 0, 0, mWinFrames, mMergedConfiguration,
                             mSurfaceControl, mInsetsState, mTempControls, mSyncSeqIdBundle);
+                    final Rect outMaxBounds = mMergedConfiguration.getMergedConfiguration()
+                            .windowConfiguration.getMaxBounds();
+                    if (!outMaxBounds.equals(maxBounds)) {
+                        Log.i(TAG, "Retry updateSurface because bounds changed from relayout: "
+                                + maxBounds + " -> " + outMaxBounds);
+                        mSurfaceHolder.mSurfaceLock.unlock();
+                        mDrawingAllowed = false;
+                        mCaller.sendMessage(mCaller.obtainMessageI(MSG_WINDOW_RESIZED,
+                                redrawNeeded ? 1 : 0));
+                        return;
+                    }
 
                     final int transformHint = SurfaceControl.rotationToBufferTransform(
                             (mDisplay.getInstallOrientation() + mDisplay.getRotation()) % 4);
@@ -1476,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");
@@ -1549,6 +1576,13 @@
             }
         }
 
+        void onScreenTurningOnChanged(boolean isScreenTurningOn) {
+            if (!mDestroyed) {
+                mIsScreenTurningOn = isScreenTurningOn;
+                reportVisibility(false);
+            }
+        }
+
         void doVisibilityChanged(boolean visible) {
             if (!mDestroyed) {
                 mVisible = visible;
@@ -1565,9 +1599,10 @@
                 return;
             }
             if (!mDestroyed) {
-                mDisplayState = mDisplay == null ? Display.STATE_UNKNOWN :
-                        mDisplay.getCommittedState();
-                boolean visible = mVisible && mDisplayState != Display.STATE_OFF;
+                mDisplayState =
+                        mDisplay == null ? Display.STATE_UNKNOWN : mDisplay.getCommittedState();
+                boolean displayVisible = Display.isOnState(mDisplayState) && !mIsScreenTurningOn;
+                boolean visible = mVisible && displayVisible;
                 if (DEBUG) {
                     Log.v(
                             TAG,
@@ -2304,6 +2339,8 @@
         final IBinder mWindowToken;
         final int mWindowType;
         final boolean mIsPreview;
+        final AtomicInteger mPendingResizeCount = new AtomicInteger();
+        boolean mReportDraw;
         boolean mShownReported;
         int mReqWidth;
         int mReqHeight;
@@ -2486,6 +2523,20 @@
             }
         }
 
+        public void updateScreenTurningOn(boolean isScreenTurningOn) {
+            Message msg = mCaller.obtainMessageBO(MSG_UPDATE_SCREEN_TURNING_ON, isScreenTurningOn,
+                    null);
+            mCaller.sendMessage(msg);
+        }
+
+        public void onScreenTurningOn() throws RemoteException {
+            updateScreenTurningOn(true);
+        }
+
+        public void onScreenTurnedOn() throws RemoteException {
+            updateScreenTurningOn(false);
+        }
+
         @Override
         public void executeMessage(Message message) {
             switch (message.what) {
@@ -2530,6 +2581,13 @@
                             + ": " + message.arg1);
                     mEngine.doVisibilityChanged(message.arg1 != 0);
                     break;
+                case MSG_UPDATE_SCREEN_TURNING_ON:
+                    if (DEBUG) {
+                        Log.v(TAG,
+                                message.arg1 != 0 ? "Screen turning on" : "Screen turned on");
+                    }
+                    mEngine.onScreenTurningOnChanged(/* isScreenTurningOn= */ message.arg1 != 0);
+                    break;
                 case MSG_WALLPAPER_OFFSETS: {
                     mEngine.doOffsetsChanged(true);
                 } break;
@@ -2538,11 +2596,7 @@
                     mEngine.doCommand(cmd);
                 } break;
                 case MSG_WINDOW_RESIZED: {
-                    final boolean reportDraw = message.arg1 != 0;
-                    mEngine.updateConfiguration(((MergedConfiguration) message.obj));
-                    mEngine.updateSurface(true, false, reportDraw);
-                    mEngine.doOffsetsChanged(true);
-                    mEngine.scaleAndCropScreenshot();
+                    handleResized((MergedConfiguration) message.obj, message.arg1 != 0);
                 } break;
                 case MSG_WINDOW_MOVED: {
                     // Do nothing. What does it mean for a Wallpaper to move?
@@ -2590,6 +2644,40 @@
                     Log.w(TAG, "Unknown message type " + message.what);
             }
         }
+
+        /**
+         * In general this performs relayout for IWindow#resized. If there are several pending
+         * (in the message queue) MSG_WINDOW_RESIZED from server side, only the last one will be
+         * handled (ignore intermediate states). Note that this procedure cannot be skipped if the
+         * configuration is not changed because this is also used to dispatch insets changes.
+         */
+        private void handleResized(MergedConfiguration config, boolean reportDraw) {
+            // The config can be null when retrying for a changed config from relayout, otherwise
+            // it is from IWindow#resized which always sends non-null config.
+            final int pendingCount = config != null ? mPendingResizeCount.decrementAndGet() : -1;
+            if (reportDraw) {
+                mReportDraw = true;
+            }
+            if (pendingCount > 0) {
+                if (DEBUG) {
+                    Log.d(TAG, "Skip outdated resize, bounds="
+                            + config.getMergedConfiguration().windowConfiguration.getMaxBounds()
+                            + " pendingCount=" + pendingCount);
+                }
+                return;
+            }
+            if (config != null) {
+                if (DEBUG) {
+                    Log.d(TAG, "Update config from resized, bounds="
+                            + config.getMergedConfiguration().windowConfiguration.getMaxBounds());
+                }
+                mEngine.mMergedConfiguration.setTo(config);
+            }
+            mEngine.updateSurface(true /* forceRelayout */, false /* forceReport */, mReportDraw);
+            mReportDraw = false;
+            mEngine.doOffsetsChanged(true);
+            mEngine.scaleAndCropScreenshot();
+        }
     }
 
     /**
@@ -2650,7 +2738,12 @@
             engineWrapper.destroy();
         }
         mActiveEngines.clear();
-        mBackgroundThread.quitSafely();
+        if (mBackgroundThread != null) {
+            // onDestroy might be called without a previous onCreate if WallpaperService was
+            // instantiated manually. While this is a misuse of the API, some things break
+            // if here we don't take into consideration this scenario.
+            mBackgroundThread.quitSafely();
+        }
         Trace.endSection();
     }
 
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/TimeUtils.java b/core/java/android/util/TimeUtils.java
index 9a93e1b..d06b0ce 100644
--- a/core/java/android/util/TimeUtils.java
+++ b/core/java/android/util/TimeUtils.java
@@ -354,6 +354,15 @@
     }
 
     /** @hide Just for debugging; not internationalized. */
+    public static void formatDuration(long time, long now, StringBuilder sb) {
+        if (time == 0) {
+            sb.append("--");
+            return;
+        }
+        formatDuration(time-now, sb, 0);
+    }
+
+    /** @hide Just for debugging; not internationalized. */
     public static void formatDuration(long time, long now, PrintWriter pw) {
         if (time == 0) {
             pw.print("--");
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/Choreographer.java b/core/java/android/view/Choreographer.java
index 8c4e90c..edc5993 100644
--- a/core/java/android/view/Choreographer.java
+++ b/core/java/android/view/Choreographer.java
@@ -195,7 +195,7 @@
 
     private boolean mDebugPrintNextFrameTimeDelta;
     private int mFPSDivisor = 1;
-    private DisplayEventReceiver.VsyncEventData mLastVsyncEventData =
+    private final DisplayEventReceiver.VsyncEventData mLastVsyncEventData =
             new DisplayEventReceiver.VsyncEventData();
     private final FrameData mFrameData = new FrameData();
 
@@ -785,12 +785,13 @@
             DisplayEventReceiver.VsyncEventData vsyncEventData) {
         final long startNanos;
         final long frameIntervalNanos = vsyncEventData.frameInterval;
+        boolean resynced = false;
         try {
+            FrameTimeline timeline = mFrameData.update(frameTimeNanos, vsyncEventData);
             if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
-                Trace.traceBegin(Trace.TRACE_TAG_VIEW,
-                        "Choreographer#doFrame " + vsyncEventData.preferredFrameTimeline().vsyncId);
+                Trace.traceBegin(
+                        Trace.TRACE_TAG_VIEW, "Choreographer#doFrame " + timeline.mVsyncId);
             }
-            mFrameData.update(frameTimeNanos, vsyncEventData);
             synchronized (mLock) {
                 if (!mFrameScheduled) {
                     traceMessage("Frame not scheduled");
@@ -828,7 +829,9 @@
                                     + " ms in the past.");
                         }
                     }
-                    mFrameData.update(frameTimeNanos, mDisplayEventReceiver, jitterNanos);
+                    timeline = mFrameData.update(
+                            frameTimeNanos, mDisplayEventReceiver, jitterNanos);
+                    resynced = true;
                 }
 
                 if (frameTimeNanos < mLastFrameTimeNanos) {
@@ -857,7 +860,13 @@
                 mFrameScheduled = false;
                 mLastFrameTimeNanos = frameTimeNanos;
                 mLastFrameIntervalNanos = frameIntervalNanos;
-                mLastVsyncEventData = vsyncEventData;
+                mLastVsyncEventData.copyFrom(vsyncEventData);
+            }
+
+            if (resynced && Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
+                String message = String.format("Choreographer#doFrame - resynced to %d in %.1fms",
+                        timeline.mVsyncId, (timeline.mDeadlineNanos - startNanos) * 0.000001f);
+                Trace.traceBegin(Trace.TRACE_TAG_VIEW, message);
             }
 
             AnimationUtils.lockAnimationClock(frameTimeNanos / TimeUtils.NANOS_PER_MS);
@@ -875,6 +884,9 @@
             doCallbacks(Choreographer.CALLBACK_COMMIT, frameIntervalNanos);
         } finally {
             AnimationUtils.unlockAnimationClock();
+            if (resynced) {
+                Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+            }
             Trace.traceEnd(Trace.TRACE_TAG_VIEW);
         }
 
@@ -1149,7 +1161,8 @@
          * Update the frame data with a {@code DisplayEventReceiver.VsyncEventData} received from
          * native.
          */
-        void update(long frameTimeNanos, DisplayEventReceiver.VsyncEventData vsyncEventData) {
+        FrameTimeline update(
+                long frameTimeNanos, DisplayEventReceiver.VsyncEventData vsyncEventData) {
             if (vsyncEventData.frameTimelines.length != mFrameTimelines.length) {
                 throw new IllegalStateException(
                         "Length of native frame timelines received does not match Java. Did "
@@ -1164,6 +1177,7 @@
                 mFrameTimelines[i].update(frameTimeline.vsyncId,
                         frameTimeline.expectedPresentationTime, frameTimeline.deadline);
             }
+            return mFrameTimelines[mPreferredFrameTimelineIndex];
         }
 
         /**
@@ -1171,7 +1185,7 @@
          *
          * @param jitterNanos currentTime - frameTime
          */
-        void update(
+        FrameTimeline update(
                 long frameTimeNanos, DisplayEventReceiver displayEventReceiver, long jitterNanos) {
             int newPreferredIndex = 0;
             final long minimumDeadline =
@@ -1192,6 +1206,7 @@
             } else {
                 update(frameTimeNanos, newPreferredIndex);
             }
+            return mFrameTimelines[mPreferredFrameTimelineIndex];
         }
 
         void update(long frameTimeNanos, int newPreferredFrameTimelineIndex) {
@@ -1247,7 +1262,7 @@
         private boolean mHavePendingVsync;
         private long mTimestampNanos;
         private int mFrame;
-        private VsyncEventData mLastVsyncEventData = new VsyncEventData();
+        private final VsyncEventData mLastVsyncEventData = new VsyncEventData();
 
         FrameDisplayEventReceiver(Looper looper, int vsyncSource, long layerHandle) {
             super(looper, vsyncSource, /* eventRegistration */ 0, layerHandle);
@@ -1287,7 +1302,7 @@
 
                 mTimestampNanos = timestampNanos;
                 mFrame = frame;
-                mLastVsyncEventData = vsyncEventData;
+                mLastVsyncEventData.copyFrom(vsyncEventData);
                 Message msg = Message.obtain(mHandler, this);
                 msg.setAsynchronous(true);
                 mHandler.sendMessageAtTime(msg, timestampNanos / TimeUtils.NANOS_PER_MS);
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index baefd85..60529c7 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -2188,7 +2188,7 @@
          */
         @NonNull
         public float[] getAlternativeRefreshRates() {
-            return mAlternativeRefreshRates;
+            return Arrays.copyOf(mAlternativeRefreshRates, mAlternativeRefreshRates.length);
         }
 
         /**
@@ -2197,7 +2197,7 @@
         @NonNull
         @HdrCapabilities.HdrType
         public int[] getSupportedHdrTypes() {
-            return mSupportedHdrTypes;
+            return Arrays.copyOf(mSupportedHdrTypes, mSupportedHdrTypes.length);
         }
 
         /**
@@ -2497,8 +2497,10 @@
          * @deprecated use {@link Display#getMode()}
          * and {@link Mode#getSupportedHdrTypes()} instead
          */
-        public @HdrType int[] getSupportedHdrTypes() {
-            return mSupportedHdrTypes;
+        @Deprecated
+        @HdrType
+        public int[] getSupportedHdrTypes() {
+            return Arrays.copyOf(mSupportedHdrTypes, mSupportedHdrTypes.length);
         }
         /**
          * Returns the desired content max luminance data in cd/m2 for this display.
diff --git a/core/java/android/view/DisplayEventReceiver.java b/core/java/android/view/DisplayEventReceiver.java
index 0307489..54db34e 100644
--- a/core/java/android/view/DisplayEventReceiver.java
+++ b/core/java/android/view/DisplayEventReceiver.java
@@ -81,7 +81,10 @@
     // GC'd while the native peer of the receiver is using them.
     private MessageQueue mMessageQueue;
 
+    private final VsyncEventData mVsyncEventData = new VsyncEventData();
+
     private static native long nativeInit(WeakReference<DisplayEventReceiver> receiver,
+            WeakReference<VsyncEventData> vsyncEventData,
             MessageQueue messageQueue, int vsyncSource, int eventRegistration, long layerHandle);
     private static native long nativeGetDisplayEventReceiverFinalizer();
     @FastNative
@@ -124,7 +127,9 @@
         }
 
         mMessageQueue = looper.getQueue();
-        mReceiverPtr = nativeInit(new WeakReference<DisplayEventReceiver>(this), mMessageQueue,
+        mReceiverPtr = nativeInit(new WeakReference<DisplayEventReceiver>(this),
+                new WeakReference<VsyncEventData>(mVsyncEventData),
+                mMessageQueue,
                 vsyncSource, eventRegistration, layerHandle);
         mFreeNativeResources = sNativeAllocationRegistry.registerNativeAllocation(this,
                 mReceiverPtr);
@@ -147,9 +152,6 @@
      * @hide
      */
     public static final class VsyncEventData {
-        static final FrameTimeline[] INVALID_FRAME_TIMELINES =
-                {new FrameTimeline(FrameInfo.INVALID_VSYNC_ID, Long.MAX_VALUE, Long.MAX_VALUE)};
-
         // The amount of frame timeline choices.
         // Must be in sync with VsyncEventData::kFrameTimelinesLength in
         // frameworks/native/libs/gui/include/gui/VsyncEventData.h. If they do not match, a runtime
@@ -157,22 +159,32 @@
         static final int FRAME_TIMELINES_LENGTH = 7;
 
         public static class FrameTimeline {
+            FrameTimeline() {}
+
+            // Called from native code.
+            @SuppressWarnings("unused")
             FrameTimeline(long vsyncId, long expectedPresentationTime, long deadline) {
                 this.vsyncId = vsyncId;
                 this.expectedPresentationTime = expectedPresentationTime;
                 this.deadline = deadline;
             }
 
+            void copyFrom(FrameTimeline other) {
+                vsyncId = other.vsyncId;
+                expectedPresentationTime = other.expectedPresentationTime;
+                deadline = other.deadline;
+            }
+
             // The frame timeline vsync id, used to correlate a frame
             // produced by HWUI with the timeline data stored in Surface Flinger.
-            public final long vsyncId;
+            public long vsyncId = FrameInfo.INVALID_VSYNC_ID;
 
             // The frame timestamp for when the frame is expected to be presented.
-            public final long expectedPresentationTime;
+            public long expectedPresentationTime = Long.MAX_VALUE;
 
             // The frame deadline timestamp in {@link System#nanoTime()} timebase that it is
             // allotted for the frame to be completed.
-            public final long deadline;
+            public long deadline = Long.MAX_VALUE;
         }
 
         /**
@@ -180,11 +192,18 @@
          * {@link FrameInfo#VSYNC} to the current vsync in case Choreographer callback was heavily
          * delayed by the app.
          */
-        public final long frameInterval;
+        public long frameInterval = -1;
 
         public final FrameTimeline[] frameTimelines;
 
-        public final int preferredFrameTimelineIndex;
+        public int preferredFrameTimelineIndex = 0;
+
+        VsyncEventData() {
+            frameTimelines = new FrameTimeline[FRAME_TIMELINES_LENGTH];
+            for (int i = 0; i < frameTimelines.length; i++) {
+                frameTimelines[i] = new FrameTimeline();
+            }
+        }
 
         // Called from native code.
         @SuppressWarnings("unused")
@@ -195,10 +214,12 @@
             this.frameInterval = frameInterval;
         }
 
-        VsyncEventData() {
-            this.frameInterval = -1;
-            this.frameTimelines = INVALID_FRAME_TIMELINES;
-            this.preferredFrameTimelineIndex = 0;
+        void copyFrom(VsyncEventData other) {
+            preferredFrameTimelineIndex = other.preferredFrameTimelineIndex;
+            frameInterval = other.frameInterval;
+            for (int i = 0; i < frameTimelines.length; i++) {
+                frameTimelines[i].copyFrom(other.frameTimelines[i]);
+            }
         }
 
         public FrameTimeline preferredFrameTimeline() {
@@ -304,9 +325,8 @@
 
     // Called from native code.
     @SuppressWarnings("unused")
-    private void dispatchVsync(long timestampNanos, long physicalDisplayId, int frame,
-            VsyncEventData vsyncEventData) {
-        onVsync(timestampNanos, physicalDisplayId, frame, vsyncEventData);
+    private void dispatchVsync(long timestampNanos, long physicalDisplayId, int frame) {
+        onVsync(timestampNanos, physicalDisplayId, frame, mVsyncEventData);
     }
 
     // Called from native code.
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index e31adcf..f2373fb 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -341,6 +341,9 @@
     @Nullable
     public DisplayShape displayShape;
 
+    /**
+     * Refresh rate range limitation based on the current device layout
+     */
     @Nullable
     public SurfaceControl.RefreshRateRange layoutLimitedRefreshRate;
 
@@ -354,7 +357,7 @@
      * RefreshRateRange limitation for @Temperature.ThrottlingStatus
      */
     @NonNull
-    public SparseArray<SurfaceControl.RefreshRateRange> refreshRateThermalThrottling =
+    public SparseArray<SurfaceControl.RefreshRateRange> thermalRefreshRateThrottling =
             new SparseArray<>();
 
     public static final @android.annotation.NonNull Creator<DisplayInfo> CREATOR = new Creator<DisplayInfo>() {
@@ -434,7 +437,7 @@
                 && Objects.equals(displayShape, other.displayShape)
                 && Objects.equals(layoutLimitedRefreshRate, other.layoutLimitedRefreshRate)
                 && BrightnessSynchronizer.floatEquals(hdrSdrRatio, other.hdrSdrRatio)
-                && refreshRateThermalThrottling.contentEquals(other.refreshRateThermalThrottling);
+                && thermalRefreshRateThrottling.contentEquals(other.thermalRefreshRateThrottling);
     }
 
     @Override
@@ -491,7 +494,7 @@
         displayShape = other.displayShape;
         layoutLimitedRefreshRate = other.layoutLimitedRefreshRate;
         hdrSdrRatio = other.hdrSdrRatio;
-        refreshRateThermalThrottling = other.refreshRateThermalThrottling;
+        thermalRefreshRateThrottling = other.thermalRefreshRateThrottling;
     }
 
     public void readFromParcel(Parcel source) {
@@ -554,7 +557,7 @@
         displayShape = source.readTypedObject(DisplayShape.CREATOR);
         layoutLimitedRefreshRate = source.readTypedObject(SurfaceControl.RefreshRateRange.CREATOR);
         hdrSdrRatio = source.readFloat();
-        refreshRateThermalThrottling = source.readSparseArray(null,
+        thermalRefreshRateThrottling = source.readSparseArray(null,
                 SurfaceControl.RefreshRateRange.class);
     }
 
@@ -616,7 +619,7 @@
         dest.writeTypedObject(displayShape, flags);
         dest.writeTypedObject(layoutLimitedRefreshRate, flags);
         dest.writeFloat(hdrSdrRatio);
-        dest.writeSparseArray(refreshRateThermalThrottling);
+        dest.writeSparseArray(thermalRefreshRateThrottling);
     }
 
     @Override
@@ -884,8 +887,8 @@
         } else {
             sb.append(hdrSdrRatio);
         }
-        sb.append(", refreshRateThermalThrottling ");
-        sb.append(refreshRateThermalThrottling);
+        sb.append(", thermalRefreshRateThrottling ");
+        sb.append(thermalRefreshRateThrottling);
         sb.append("}");
         return sb.toString();
     }
diff --git a/core/java/android/view/HandwritingInitiator.java b/core/java/android/view/HandwritingInitiator.java
index 77f3b1d..dd4f964 100644
--- a/core/java/android/view/HandwritingInitiator.java
+++ b/core/java/android/view/HandwritingInitiator.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 import android.graphics.Rect;
 import android.view.inputmethod.InputMethodManager;
+import android.widget.TextView;
 
 import com.android.internal.annotations.VisibleForTesting;
 
@@ -305,6 +306,9 @@
         mImm.startStylusHandwriting(view);
         mState.mHasInitiatedHandwriting = true;
         mState.mShouldInitHandwriting = false;
+        if (view instanceof TextView) {
+            ((TextView) view).hideHint();
+        }
     }
 
     /**
@@ -323,6 +327,9 @@
                 mState.mHasInitiatedHandwriting = true;
                 mState.mShouldInitHandwriting = false;
             }
+            if (view instanceof TextView) {
+                ((TextView) view).hideHint();
+            }
             return true;
         }
         return false;
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 cd89a56..d987217 100644
--- a/core/java/android/view/SurfaceControlViewHost.java
+++ b/core/java/android/view/SurfaceControlViewHost.java
@@ -120,6 +120,8 @@
 
     private ISurfaceControlViewHost mRemoteInterface = new ISurfaceControlViewHostImpl();
 
+    private ViewRootImpl.ConfigChangedCallback mConfigChangedCallback;
+
     /**
      * Package encapsulating a Surface hierarchy which contains interactive view
      * elements. It's expected to get this object from
@@ -303,10 +305,11 @@
     /** @hide */
     public SurfaceControlViewHost(@NonNull Context c, @NonNull Display d,
             @NonNull WindowlessWindowManager wwm, @NonNull String callsite) {
+        mSurfaceControl = wwm.mRootSurface;
         mWm = wwm;
         mViewRoot = new ViewRootImpl(c, d, mWm, new WindowlessWindowLayout());
         mCloseGuard.openWithCallSite("release", callsite);
-        addConfigCallback(c, d);
+        setConfigCallback(c, d);
 
         WindowManagerGlobal.getInstance().addWindowlessRoot(mViewRoot);
 
@@ -356,21 +359,23 @@
 
         mViewRoot = new ViewRootImpl(context, display, mWm, new WindowlessWindowLayout());
         mCloseGuard.openWithCallSite("release", callsite);
-        addConfigCallback(context, display);
+        setConfigCallback(context, display);
 
         WindowManagerGlobal.getInstance().addWindowlessRoot(mViewRoot);
 
         mAccessibilityEmbeddedConnection = mViewRoot.getAccessibilityEmbeddedConnection();
     }
 
-    private void addConfigCallback(Context c, Display d) {
+    private void setConfigCallback(Context c, Display d) {
         final IBinder token = c.getWindowContextToken();
-        mViewRoot.addConfigCallback((conf) -> {
+        mConfigChangedCallback = conf -> {
             if (token instanceof WindowTokenClient) {
                 final WindowTokenClient w = (WindowTokenClient)  token;
                 w.onConfigurationChanged(conf, d.getDisplayId(), true);
             }
-        });
+        };
+
+        ViewRootImpl.addConfigCallback(mConfigChangedCallback);
     }
 
     /**
@@ -385,8 +390,7 @@
             mCloseGuard.warnIfOpen();
         }
         // We aren't on the UI thread here so we need to pass false to doDie
-        mViewRoot.die(false /* immediate */);
-        WindowManagerGlobal.getInstance().removeWindowlessRoot(mViewRoot);
+        doRelease(false /* immediate */);
     }
 
     /**
@@ -399,14 +403,20 @@
     public @Nullable SurfacePackage getSurfacePackage() {
         if (mSurfaceControl != null && mAccessibilityEmbeddedConnection != null) {
             return new SurfacePackage(new SurfaceControl(mSurfaceControl, "getSurfacePackage"),
-                mAccessibilityEmbeddedConnection,
-                mWm.getFocusGrantToken(), mRemoteInterface);
+                mAccessibilityEmbeddedConnection, getFocusGrantToken(), mRemoteInterface);
         } else {
             return null;
         }
     }
 
     /**
+     * @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.
@@ -496,7 +506,16 @@
      */
     public void release() {
         // ViewRoot will release mSurfaceControl for us.
-        mViewRoot.die(true /* immediate */);
+        doRelease(true /* immediate */);
+    }
+
+    private void doRelease(boolean immediate) {
+        if (mConfigChangedCallback != null) {
+            ViewRootImpl.removeConfigCallback(mConfigChangedCallback);
+            mConfigChangedCallback = null;
+        }
+
+        mViewRoot.die(immediate);
         WindowManagerGlobal.getInstance().removeWindowlessRoot(mViewRoot);
         mReleased = true;
         mCloseGuard.close();
@@ -506,7 +525,7 @@
      * @hide
      */
     public IBinder getFocusGrantToken() {
-        return mWm.getFocusGrantToken();
+        return mWm.getFocusGrantToken(getWindowToken().asBinder());
     }
 
     private void addWindowToken(WindowManager.LayoutParams attrs) {
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index cdea97c..0e4cf89 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -1854,6 +1854,10 @@
             applyTransactionOnVriDraw(transaction);
         }
         mSurfacePackage = p;
+
+        if (isFocused()) {
+            requestEmbeddedFocus(true);
+        }
         invalidate();
     }
 
@@ -1947,8 +1951,12 @@
 
     @Override
     protected void onFocusChanged(boolean gainFocus, @FocusDirection int direction,
-                                  @Nullable Rect previouslyFocusedRect) {
+            @Nullable Rect previouslyFocusedRect) {
         super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
+        requestEmbeddedFocus(gainFocus);
+    }
+
+    private void requestEmbeddedFocus(boolean gainFocus) {
         final ViewRootImpl viewRoot = getViewRootImpl();
         if (mSurfacePackage == null || viewRoot == null) {
             return;
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 055b5cb..6bd9538 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
@@ -882,6 +885,16 @@
      */
     private SurfaceSyncGroup mActiveSurfaceSyncGroup;
 
+
+    private final Object mPreviousSyncSafeguardLock = new Object();
+
+    /**
+     * Wraps the TransactionCommitted callback for the previous SSG so it can be added to the next
+     * SSG if started before previous has completed.
+     */
+    @GuardedBy("mPreviousSyncSafeguardLock")
+    private SurfaceSyncGroup mPreviousSyncSafeguard;
+
     private static final Object sSyncProgressLock = new Object();
     // The count needs to be static since it's used to enable or disable RT animations which is
     // done at a global level per process. If any VRI syncs are in progress, we can't enable RT
@@ -994,14 +1007,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 +1501,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 +1519,9 @@
                 mAccessibilityInteractionConnectionManager);
         mAccessibilityManager.removeHighTextContrastStateChangeListener(
                 mHighContrastTextManager);
-        mDisplayManager.unregisterDisplayListener(mDisplayListener);
+        DisplayManagerGlobal
+                .getInstance()
+                .unregisterDisplayListener(mDisplayListener);
     }
 
     private void setTag() {
@@ -5382,7 +5404,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 +6971,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 +7042,7 @@
         }
 
         PointerIcon pointerIcon = null;
-
-        if (event.isStylusPointer() && mInputManager.isStylusPointerIconEnabled()) {
+        if (event.isStylusPointer() && mIsStylusPointerIconEnabled) {
             pointerIcon = mHandwritingInitiator.onResolvePointerIcon(mContext, event);
         }
 
@@ -7034,14 +7057,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;
     }
@@ -11263,13 +11290,19 @@
                 }
 
                 if (syncBuffer) {
-                    mBlastBufferQueue.syncNextTransaction(new Consumer<Transaction>() {
-                        @Override
-                        public void accept(Transaction transaction) {
-                            surfaceSyncGroup.addTransaction(transaction);
-                            surfaceSyncGroup.markSyncReady();
-                        }
+                    boolean result = mBlastBufferQueue.syncNextTransaction(transaction -> {
+                        surfaceSyncGroup.addTransaction(transaction);
+                        surfaceSyncGroup.markSyncReady();
                     });
+                    if (!result) {
+                        // syncNextTransaction can only return false if something is already trying
+                        // to sync the same frame in the same BBQ. That shouldn't be possible, but
+                        // if it did happen, invoke markSyncReady so the active SSG doesn't get
+                        // stuck.
+                        Log.e(mTag, "Unable to syncNextTransaction. Possibly something else is"
+                                + " trying to sync?");
+                        surfaceSyncGroup.markSyncReady();
+                    }
                 }
 
                 return didProduceBuffer -> {
@@ -11283,7 +11316,7 @@
                     // the next draw attempt. The next transaction and transaction complete callback
                     // were only set for the current draw attempt.
                     if (!didProduceBuffer) {
-                        mBlastBufferQueue.syncNextTransaction(null);
+                        mBlastBufferQueue.clearSyncTransaction();
 
                         // Gather the transactions that were sent to mergeWithNextTransaction
                         // since the frame didn't draw on this vsync. It's possible the frame will
@@ -11306,6 +11339,61 @@
         });
     }
 
+    /**
+     * This code will ensure that if multiple SurfaceSyncGroups are created for the same
+     * ViewRootImpl the SurfaceSyncGroups will maintain an order. The scenario that could occur
+     * is the following:
+     * <p>
+     * 1. SSG1 is created that includes the target VRI. There could be other VRIs in SSG1
+     * 2. The target VRI draws its frame and marks its own active SSG as ready, but SSG1 is still
+     *    waiting on other things in the SSG
+     * 3. Another SSG2 is created for the target VRI. The second frame renders and marks its own
+     *    second SSG as complete. SSG2 has nothing else to wait on, so it will apply at this point,
+     *    even though SSG1 has not finished.
+     * 4. Frame2 will get to SF first and Frame1 will later get to SF when SSG1 completes.
+     * <p>
+     * The code below ensures the SSGs that contains the VRI maintain an order. We create a new SSG
+     * that's a safeguard SSG. Its only job is to prevent the next active SSG from completing.
+     * The current active SSG for VRI will add a transaction committed callback and when that's
+     * invoked, it will mark the safeguard SSG as ready. If a new request to create a SSG comes
+     * in and the safeguard SSG is not null, it's added as part of the new active SSG. A new
+     * safeguard SSG is created to correspond to the new active SSG. This creates a chain to
+     * ensure the latter SSG always waits for the former SSG's transaction to get to SF.
+     */
+    private void safeguardOverlappingSyncs(SurfaceSyncGroup activeSurfaceSyncGroup) {
+        SurfaceSyncGroup safeguardSsg = new SurfaceSyncGroup("VRI-Safeguard");
+        // Always disable timeout on the safeguard sync
+        safeguardSsg.toggleTimeout(false /* enable */);
+        synchronized (mPreviousSyncSafeguardLock) {
+            if (mPreviousSyncSafeguard != null) {
+                activeSurfaceSyncGroup.add(mPreviousSyncSafeguard, null /* runnable */);
+                // Temporarily disable the timeout on the SSG that will contain the buffer. This
+                // is to ensure we don't timeout the active SSG before the previous one completes to
+                // ensure the order is maintained. The previous SSG has a timeout on its own SSG
+                // so it's guaranteed to complete.
+                activeSurfaceSyncGroup.toggleTimeout(false /* enable */);
+                mPreviousSyncSafeguard.addSyncCompleteCallback(mSimpleExecutor, () -> {
+                    // Once we receive that the previous sync guard has been invoked, we can re-add
+                    // the timeout on the active sync to ensure we eventually complete so it's not
+                    // stuck permanently.
+                    activeSurfaceSyncGroup.toggleTimeout(true /*enable */);
+                });
+            }
+            mPreviousSyncSafeguard = safeguardSsg;
+        }
+
+        Transaction t = new Transaction();
+        t.addTransactionCommittedListener(mSimpleExecutor, () -> {
+            safeguardSsg.markSyncReady();
+            synchronized (mPreviousSyncSafeguardLock) {
+                if (mPreviousSyncSafeguard == safeguardSsg) {
+                    mPreviousSyncSafeguard = null;
+                }
+            }
+        });
+        activeSurfaceSyncGroup.addTransaction(t);
+    }
+
     @Override
     public SurfaceSyncGroup getOrCreateSurfaceSyncGroup() {
         boolean newSyncGroup = false;
@@ -11332,6 +11420,7 @@
                     mHandler.post(runnable);
                 }
             });
+            safeguardOverlappingSyncs(mActiveSurfaceSyncGroup);
             updateSyncInProgressCount(mActiveSurfaceSyncGroup);
             newSyncGroup = 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..5b6df1c 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -467,7 +467,7 @@
      * implementation.
      * @hide
      */
-    int TRANSIT_FIRST_CUSTOM = 13;
+    int TRANSIT_FIRST_CUSTOM = 1000;
 
     /**
      * @hide
@@ -893,7 +893,7 @@
      * &lt;application&gt;
      *   &lt;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"/&gt;
      * &lt;/application&gt;
      * </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/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java
index 9868144..96bfb2d 100644
--- a/core/java/android/view/WindowlessWindowManager.java
+++ b/core/java/android/view/WindowlessWindowManager.java
@@ -106,8 +106,22 @@
         mConfiguration.setTo(configuration);
     }
 
-    IBinder getFocusGrantToken() {
-        return mFocusGrantToken;
+    IBinder getFocusGrantToken(IBinder window) {
+        synchronized (this) {
+            // This can only happen if someone requested the focusGrantToken before setView was
+            // called for the SCVH. In that case, use the root focusGrantToken since this will be
+            // the same token sent to WMS for the root window once setView is called.
+            if (mStateForWindow.isEmpty()) {
+                return mFocusGrantToken;
+            }
+            State state = mStateForWindow.get(window);
+            if (state != null) {
+                return state.mFocusGrantToken;
+            }
+        }
+
+        Log.w(TAG, "Failed to get focusGrantToken. Returning null token");
+        return null;
     }
 
     /**
diff --git a/core/java/android/view/accessibility/AccessibilityWindowInfo.java b/core/java/android/view/accessibility/AccessibilityWindowInfo.java
index 13ac329..fa0052c 100644
--- a/core/java/android/view/accessibility/AccessibilityWindowInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityWindowInfo.java
@@ -840,6 +840,7 @@
         mAnchorId = AccessibilityNodeInfo.UNDEFINED_NODE_ID;
         mTitle = null;
         mTransitionTime = 0;
+        mLocales = LocaleList.getEmptyLocaleList();
     }
 
     /**
diff --git a/core/java/android/view/accessibility/IAccessibilityManager.aidl b/core/java/android/view/accessibility/IAccessibilityManager.aidl
index 1fac142..390503b 100644
--- a/core/java/android/view/accessibility/IAccessibilityManager.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityManager.aidl
@@ -62,7 +62,7 @@
             in IAccessibilityInteractionConnection connection);
 
     void registerUiTestAutomationService(IBinder owner, IAccessibilityServiceClient client,
-        in AccessibilityServiceInfo info, int flags);
+        in AccessibilityServiceInfo info, int userId, int flags);
 
     void unregisterUiTestAutomationService(IAccessibilityServiceClient client);
 
diff --git a/core/java/android/view/animation/AnimationUtils.java b/core/java/android/view/animation/AnimationUtils.java
index 7d1dc76..84ef226 100644
--- a/core/java/android/view/animation/AnimationUtils.java
+++ b/core/java/android/view/animation/AnimationUtils.java
@@ -28,6 +28,7 @@
 import android.os.SystemClock;
 import android.util.AttributeSet;
 import android.util.Xml;
+import android.view.InflateException;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
@@ -137,16 +138,9 @@
         try {
             parser = context.getResources().getAnimation(id);
             return createAnimationFromXml(context, parser);
-        } catch (XmlPullParserException ex) {
-            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
-                    Integer.toHexString(id));
-            rnf.initCause(ex);
-            throw rnf;
-        } catch (IOException ex) {
-            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
-                    Integer.toHexString(id));
-            rnf.initCause(ex);
-            throw rnf;
+        } catch (XmlPullParserException | IOException ex) {
+            throw new NotFoundException(
+                    "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
         } finally {
             if (parser != null) parser.close();
         }
@@ -159,8 +153,9 @@
     }
 
     @UnsupportedAppUsage
-    private static Animation createAnimationFromXml(Context c, XmlPullParser parser,
-            AnimationSet parent, AttributeSet attrs) throws XmlPullParserException, IOException {
+    private static Animation createAnimationFromXml(
+            Context c, XmlPullParser parser, AnimationSet parent, AttributeSet attrs)
+            throws XmlPullParserException, IOException, InflateException {
 
         Animation anim = null;
 
@@ -168,8 +163,8 @@
         int type;
         int depth = parser.getDepth();
 
-        while (((type=parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth)
-               && type != XmlPullParser.END_DOCUMENT) {
+        while (((type = parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth)
+                && type != XmlPullParser.END_DOCUMENT) {
 
             if (type != XmlPullParser.START_TAG) {
                 continue;
@@ -193,7 +188,7 @@
             } else if (name.equals("extend")) {
                 anim = new ExtendAnimation(c, attrs);
             } else {
-                throw new RuntimeException("Unknown animation name: " + parser.getName());
+                throw new InflateException("Unknown animation name: " + parser.getName());
             }
 
             if (parent != null) {
@@ -220,29 +215,24 @@
         try {
             parser = context.getResources().getAnimation(id);
             return createLayoutAnimationFromXml(context, parser);
-        } catch (XmlPullParserException ex) {
-            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
-                    Integer.toHexString(id));
-            rnf.initCause(ex);
-            throw rnf;
-        } catch (IOException ex) {
-            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
-                    Integer.toHexString(id));
-            rnf.initCause(ex);
-            throw rnf;
+        } catch (XmlPullParserException | IOException | InflateException ex) {
+            throw new NotFoundException(
+                    "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
         } finally {
             if (parser != null) parser.close();
         }
     }
 
-    private static LayoutAnimationController createLayoutAnimationFromXml(Context c,
-            XmlPullParser parser) throws XmlPullParserException, IOException {
+    private static LayoutAnimationController createLayoutAnimationFromXml(
+            Context c, XmlPullParser parser)
+            throws XmlPullParserException, IOException, InflateException {
 
         return createLayoutAnimationFromXml(c, parser, Xml.asAttributeSet(parser));
     }
 
-    private static LayoutAnimationController createLayoutAnimationFromXml(Context c,
-            XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, IOException {
+    private static LayoutAnimationController createLayoutAnimationFromXml(
+            Context c, XmlPullParser parser, AttributeSet attrs)
+            throws XmlPullParserException, IOException, InflateException {
 
         LayoutAnimationController controller = null;
 
@@ -263,7 +253,7 @@
             } else if ("gridLayoutAnimation".equals(name)) {
                 controller = new GridLayoutAnimationController(c, attrs);
             } else {
-                throw new RuntimeException("Unknown layout animation name: " + name);
+                throw new InflateException("Unknown layout animation name: " + name);
             }
         }
 
@@ -342,16 +332,9 @@
         try {
             parser = context.getResources().getAnimation(id);
             return createInterpolatorFromXml(context.getResources(), context.getTheme(), parser);
-        } catch (XmlPullParserException ex) {
-            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
-                    Integer.toHexString(id));
-            rnf.initCause(ex);
-            throw rnf;
-        } catch (IOException ex) {
-            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
-                    Integer.toHexString(id));
-            rnf.initCause(ex);
-            throw rnf;
+        } catch (XmlPullParserException | IOException | InflateException ex) {
+            throw new NotFoundException(
+                    "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
         } finally {
             if (parser != null) parser.close();
         }
@@ -367,30 +350,26 @@
      * @throws NotFoundException
      * @hide
      */
-    public static Interpolator loadInterpolator(Resources res, Theme theme, int id) throws NotFoundException {
+    public static Interpolator loadInterpolator(Resources res, Theme theme, int id)
+            throws NotFoundException {
         XmlResourceParser parser = null;
         try {
             parser = res.getAnimation(id);
             return createInterpolatorFromXml(res, theme, parser);
-        } catch (XmlPullParserException ex) {
-            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
-                    Integer.toHexString(id));
-            rnf.initCause(ex);
-            throw rnf;
-        } catch (IOException ex) {
-            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
-                    Integer.toHexString(id));
-            rnf.initCause(ex);
-            throw rnf;
+        } catch (XmlPullParserException | IOException | InflateException ex) {
+            throw new NotFoundException(
+                    "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
         } finally {
-            if (parser != null)
+            if (parser != null) {
                 parser.close();
+            }
         }
 
     }
 
-    private static Interpolator createInterpolatorFromXml(Resources res, Theme theme, XmlPullParser parser)
-            throws XmlPullParserException, IOException {
+    private static Interpolator createInterpolatorFromXml(
+            Resources res, Theme theme, XmlPullParser parser)
+            throws XmlPullParserException, IOException, InflateException {
 
         BaseInterpolator interpolator = null;
 
@@ -430,7 +409,7 @@
             } else if (name.equals("pathInterpolator")) {
                 interpolator = new PathInterpolator(res, theme, attrs);
             } else {
-                throw new RuntimeException("Unknown interpolator name: " + parser.getName());
+                throw new InflateException("Unknown interpolator name: " + parser.getName());
             }
         }
         return interpolator;
diff --git a/core/java/android/view/translation/Translator.java b/core/java/android/view/translation/Translator.java
index 70db6e5..50249da 100644
--- a/core/java/android/view/translation/Translator.java
+++ b/core/java/android/view/translation/Translator.java
@@ -18,7 +18,6 @@
 
 import static android.view.translation.TranslationManager.STATUS_SYNC_CALL_FAIL;
 import static android.view.translation.TranslationManager.SYNC_CALLS_TIMEOUT_MS;
-import static android.view.translation.UiTranslationController.DEBUG;
 
 import android.annotation.CallbackExecutor;
 import android.annotation.NonNull;
@@ -402,7 +401,7 @@
 
         @Override
         public void onTranslationResponse(TranslationResponse response) throws RemoteException {
-            if (DEBUG) {
+            if (Log.isLoggable(UiTranslationManager.LOG_TAG, Log.DEBUG)) {
                 Log.i(TAG, "onTranslationResponse called.");
             }
             final Runnable runnable =
diff --git a/core/java/android/view/translation/UiTranslationController.java b/core/java/android/view/translation/UiTranslationController.java
index 514df59..140e3f1 100644
--- a/core/java/android/view/translation/UiTranslationController.java
+++ b/core/java/android/view/translation/UiTranslationController.java
@@ -122,8 +122,9 @@
             Log.i(TAG, "Cannot update " + stateToString(state) + " for destroyed " + mActivity);
             return;
         }
+        boolean isLoggable = Log.isLoggable(UiTranslationManager.LOG_TAG, Log.DEBUG);
         Log.i(TAG, "updateUiTranslationState state: " + stateToString(state)
-                + (DEBUG ? (", views: " + views + ", spec: " + uiTranslationSpec) : ""));
+                + (isLoggable ? (", views: " + views + ", spec: " + uiTranslationSpec) : ""));
         synchronized (mLock) {
             mCurrentState = state;
             if (views != null) {
@@ -237,7 +238,7 @@
             }
             pw.print(outerPrefix); pw.print("padded views: "); pw.println(mViewsToPadContent);
         }
-        if (DEBUG) {
+        if (Log.isLoggable(UiTranslationManager.LOG_TAG, Log.DEBUG)) {
             dumpViewByTraversal(outerPrefix, pw);
         }
     }
@@ -345,6 +346,7 @@
      */
     private void onVirtualViewTranslationCompleted(
             SparseArray<LongSparseArray<ViewTranslationResponse>> translatedResult) {
+        boolean isLoggable = Log.isLoggable(UiTranslationManager.LOG_TAG, Log.DEBUG);
         if (mActivity.isDestroyed()) {
             Log.v(TAG, "onTranslationCompleted:" + mActivity + "is destroyed.");
             return;
@@ -369,7 +371,7 @@
                 }
                 final LongSparseArray<ViewTranslationResponse> virtualChildResponse =
                         translatedResult.valueAt(i);
-                if (DEBUG) {
+                if (isLoggable) {
                     Log.v(TAG, "onVirtualViewTranslationCompleted: received response for "
                             + "AutofillId " + autofillId);
                 }
@@ -379,7 +381,7 @@
                 }
                 mActivity.runOnUiThread(() -> {
                     if (view.getViewTranslationCallback() == null) {
-                        if (DEBUG) {
+                        if (isLoggable) {
                             Log.d(TAG, view + " doesn't support showing translation because of "
                                     + "null ViewTranslationCallback.");
                         }
@@ -397,12 +399,13 @@
      * The method is used to handle the translation result for non-vertual views.
      */
     private void onTranslationCompleted(SparseArray<ViewTranslationResponse> translatedResult) {
+        boolean isLoggable = Log.isLoggable(UiTranslationManager.LOG_TAG, Log.DEBUG);
         if (mActivity.isDestroyed()) {
             Log.v(TAG, "onTranslationCompleted:" + mActivity + "is destroyed.");
             return;
         }
         final int resultCount = translatedResult.size();
-        if (DEBUG) {
+        if (isLoggable) {
             Log.v(TAG, "onTranslationCompleted: receive " + resultCount + " responses.");
         }
         synchronized (mLock) {
@@ -413,7 +416,7 @@
             }
             for (int i = 0; i < resultCount; i++) {
                 final ViewTranslationResponse response = translatedResult.valueAt(i);
-                if (DEBUG) {
+                if (isLoggable) {
                     Log.v(TAG, "onTranslationCompleted: "
                             + sanitizedViewTranslationResponse(response));
                 }
@@ -443,7 +446,7 @@
                                     (TextViewTranslationCallback) callback;
                             if (textViewCallback.isShowingTranslation()
                                     || textViewCallback.isAnimationRunning()) {
-                                if (DEBUG) {
+                                if (isLoggable) {
                                     Log.d(TAG, "Duplicate ViewTranslationResponse for " + autofillId
                                             + ". Ignoring.");
                                 }
@@ -458,7 +461,7 @@
                             callback = new TextViewTranslationCallback();
                             view.setViewTranslationCallback(callback);
                         } else {
-                            if (DEBUG) {
+                            if (isLoggable) {
                                 Log.d(TAG, view + " doesn't support showing translation because of "
                                         + "null ViewTranslationCallback.");
                             }
@@ -506,7 +509,7 @@
         final TranslationRequest request = new TranslationRequest.Builder()
                 .setViewTranslationRequests(requests)
                 .build();
-        if (DEBUG) {
+        if (Log.isLoggable(UiTranslationManager.LOG_TAG, Log.DEBUG)) {
             StringBuilder msg = new StringBuilder("sendTranslationRequest:{requests=[");
             for (ViewTranslationRequest viewRequest: requests) {
                 msg.append("{request=")
@@ -636,6 +639,7 @@
 
     private void runForEachView(BiConsumer<View, ViewTranslationCallback> action) {
         synchronized (mLock) {
+            boolean isLoggable = Log.isLoggable(UiTranslationManager.LOG_TAG, Log.DEBUG);
             final ArrayMap<AutofillId, WeakReference<View>> views = new ArrayMap<>(mViews);
             if (views.size() == 0) {
                 Log.w(TAG, "No views can be excuted for runForEachView.");
@@ -644,12 +648,12 @@
                 final int viewCounts = views.size();
                 for (int i = 0; i < viewCounts; i++) {
                     final View view = views.valueAt(i).get();
-                    if (DEBUG) {
+                    if (isLoggable) {
                         Log.d(TAG, "runForEachView for autofillId = " + (view != null
                                 ? view.getAutofillId() : " null"));
                     }
                     if (view == null || view.getViewTranslationCallback() == null) {
-                        if (DEBUG) {
+                        if (isLoggable) {
                             Log.d(TAG, "View was gone or ViewTranslationCallback for autofillId "
                                     + "= " + views.keyAt(i));
                         }
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..34fe935 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;
@@ -805,6 +806,7 @@
     private CharSequence mHint;
     @UnsupportedAppUsage
     private Layout mHintLayout;
+    private boolean mHideHint;
 
     private MovementMethod mMovement;
 
@@ -867,6 +869,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 +1243,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 +1594,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 +1953,11 @@
             setLastBaselineToBottomHeight(lastBaselineToBottomHeight);
         }
         if (lineHeight >= 0) {
-            setLineHeight(lineHeight);
+            if (lineHeightUnit == -1) {
+                setLineHeightPx(lineHeight);
+            } else {
+                setLineHeight(lineHeightUnit, lineHeight);
+            }
         }
     }
 
@@ -4629,6 +4650,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 +6236,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 +6261,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));
     }
 
     /**
@@ -7110,6 +7181,8 @@
         sendOnTextChanged(text, 0, oldlen, textLength);
         onTextChanged(text, 0, oldlen, textLength);
 
+        mHideHint = false;
+
         if (a11yTextChangeType == AccessibilityUtils.TEXT) {
             notifyViewAccessibilityStateChangedIfNeeded(
                     AccessibilityEvent.CONTENT_CHANGE_TYPE_TEXT);
@@ -7268,6 +7341,7 @@
     }
 
     private void setHintInternal(CharSequence hint) {
+        mHideHint = false;
         mHint = TextUtils.stringOrSpannedString(hint);
 
         if (mLayout != null) {
@@ -7309,6 +7383,19 @@
     }
 
     /**
+     * Temporarily hides the hint text until the text is modified, or the hint text is modified, or
+     * the view gains or loses focus.
+     *
+     * @hide
+     */
+    public void hideHint() {
+        if (isShowingHint()) {
+            mHideHint = true;
+            invalidate();
+        }
+    }
+
+    /**
      * Returns if the text is constrained to a single horizontally scrolling line ignoring new
      * line characters instead of letting it wrap onto multiple lines.
      *
@@ -8904,7 +8991,7 @@
 
         Layout layout = mLayout;
 
-        if (mHint != null && mText.length() == 0) {
+        if (mHint != null && !mHideHint && mText.length() == 0) {
             if (mHintTextColor != null) {
                 color = mCurHintTextColor;
             }
@@ -11223,7 +11310,7 @@
     }
 
     private boolean isShowingHint() {
-        return TextUtils.isEmpty(mText) && !TextUtils.isEmpty(mHint);
+        return TextUtils.isEmpty(mText) && !TextUtils.isEmpty(mHint) && !mHideHint;
     }
 
     /**
@@ -12367,6 +12454,7 @@
         sendOnTextChanged(buffer, start, before, after);
         onTextChanged(buffer, start, before, after);
 
+        mHideHint = false;
         clearGesturePreviewHighlight();
     }
 
@@ -12507,6 +12595,8 @@
             return;
         }
 
+        mHideHint = false;
+
         if (mEditor != null) mEditor.onFocusChanged(focused, direction);
 
         if (focused) {
diff --git a/core/java/android/window/BackMotionEvent.java b/core/java/android/window/BackMotionEvent.java
index 8012a1c..c475723 100644
--- a/core/java/android/window/BackMotionEvent.java
+++ b/core/java/android/window/BackMotionEvent.java
@@ -34,6 +34,8 @@
     private final float mTouchX;
     private final float mTouchY;
     private final float mProgress;
+    private final float mVelocityX;
+    private final float mVelocityY;
 
     @BackEvent.SwipeEdge
     private final int mSwipeEdge;
@@ -43,19 +45,32 @@
     /**
      * Creates a new {@link BackMotionEvent} instance.
      *
+     * <p>Note: Velocity is only computed for last event, for performance reasons.</p>
+     *
      * @param touchX Absolute X location of the touch point of this event.
      * @param touchY Absolute Y location of the touch point of this event.
      * @param progress Value between 0 and 1 on how far along the back gesture is.
+     * @param velocityX X velocity computed from the touch point of this event.
+     *                  Value in pixels/second. {@link Float#NaN} if was not computed.
+     * @param velocityY Y velocity computed from the touch point of this event.
+     *                  Value in pixels/second. {@link Float#NaN} if was not computed.
      * @param swipeEdge Indicates which edge the swipe starts from.
      * @param departingAnimationTarget The remote animation target of the departing
      *                                 application window.
      */
-    public BackMotionEvent(float touchX, float touchY, float progress,
+    public BackMotionEvent(
+            float touchX,
+            float touchY,
+            float progress,
+            float velocityX,
+            float velocityY,
             @BackEvent.SwipeEdge int swipeEdge,
             @Nullable RemoteAnimationTarget departingAnimationTarget) {
         mTouchX = touchX;
         mTouchY = touchY;
         mProgress = progress;
+        mVelocityX = velocityX;
+        mVelocityY = velocityY;
         mSwipeEdge = swipeEdge;
         mDepartingAnimationTarget = departingAnimationTarget;
     }
@@ -64,6 +79,8 @@
         mTouchX = in.readFloat();
         mTouchY = in.readFloat();
         mProgress = in.readFloat();
+        mVelocityX = in.readFloat();
+        mVelocityY = in.readFloat();
         mSwipeEdge = in.readInt();
         mDepartingAnimationTarget = in.readTypedObject(RemoteAnimationTarget.CREATOR);
     }
@@ -91,21 +108,13 @@
         dest.writeFloat(mTouchX);
         dest.writeFloat(mTouchY);
         dest.writeFloat(mProgress);
+        dest.writeFloat(mVelocityX);
+        dest.writeFloat(mVelocityY);
         dest.writeInt(mSwipeEdge);
         dest.writeTypedObject(mDepartingAnimationTarget, flags);
     }
 
     /**
-     * Returns the progress of a {@link BackEvent}.
-     *
-     * @see BackEvent#getProgress()
-     */
-    @FloatRange(from = 0, to = 1)
-    public float getProgress() {
-        return mProgress;
-    }
-
-    /**
      * Returns the absolute X location of the touch point.
      */
     public float getTouchX() {
@@ -120,6 +129,34 @@
     }
 
     /**
+     * Returns the progress of a {@link BackEvent}.
+     *
+     * @see BackEvent#getProgress()
+     */
+    @FloatRange(from = 0, to = 1)
+    public float getProgress() {
+        return mProgress;
+    }
+
+    /**
+     * Returns the X velocity computed from the touch point.
+     *
+     * @return value in pixels/second or {@link Float#NaN} if was not computed.
+     */
+    public float getVelocityX() {
+        return mVelocityX;
+    }
+
+    /**
+     * Returns the Y velocity computed from the touch point.
+     *
+     * @return value in pixels/second or {@link Float#NaN} if was not computed.
+     */
+    public float getVelocityY() {
+        return mVelocityY;
+    }
+
+    /**
      * Returns the screen edge that the swipe starts from.
      */
     @BackEvent.SwipeEdge
@@ -143,6 +180,8 @@
                 + "mTouchX=" + mTouchX
                 + ", mTouchY=" + mTouchY
                 + ", mProgress=" + mProgress
+                + ", mVelocityX=" + mVelocityX
+                + ", mVelocityY=" + mVelocityY
                 + ", mSwipeEdge" + mSwipeEdge
                 + ", mDepartingAnimationTarget" + mDepartingAnimationTarget
                 + "}";
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/SurfaceSyncGroup.java b/core/java/android/window/SurfaceSyncGroup.java
index 7f99fb7..1840567 100644
--- a/core/java/android/window/SurfaceSyncGroup.java
+++ b/core/java/android/window/SurfaceSyncGroup.java
@@ -38,6 +38,7 @@
 import android.view.WindowManagerGlobal;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -63,7 +64,12 @@
     private static final int MAX_COUNT = 100;
 
     private static final AtomicInteger sCounter = new AtomicInteger(0);
-    private static final int TRANSACTION_READY_TIMEOUT = 1000 * Build.HW_TIMEOUT_MULTIPLIER;
+
+    /**
+     * @hide
+     */
+    @VisibleForTesting
+    public static final int TRANSACTION_READY_TIMEOUT = 1000 * Build.HW_TIMEOUT_MULTIPLIER;
 
     private static Supplier<Transaction> sTransactionFactory = Transaction::new;
 
@@ -120,8 +126,17 @@
     private static HandlerThread sHandlerThread;
     private Handler mHandler;
 
+    @GuardedBy("mLock")
     private boolean mTimeoutAdded;
 
+    /**
+     * Disable the timeout for this SSG so it will never be set until there's an explicit call to
+     * add a timeout.
+     */
+    @GuardedBy("mLock")
+    private boolean mTimeoutDisabled;
+
+
     private static boolean isLocalBinder(IBinder binder) {
         return !(binder instanceof BinderProxy);
     }
@@ -222,6 +237,10 @@
      */
     public void addSyncCompleteCallback(Executor executor, Runnable runnable) {
         synchronized (mLock) {
+            if (mFinished) {
+                executor.execute(runnable);
+                return;
+            }
             mSyncCompleteCallbacks.add(new Pair<>(executor, runnable));
         }
     }
@@ -234,6 +253,9 @@
      * SurfaceSyncGroup have completed their sync.
      */
     public void markSyncReady() {
+        if (DEBUG) {
+            Log.d(TAG, "markSyncReady " + mName);
+        }
         if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
             Trace.traceBegin(Trace.TRACE_TAG_VIEW, "markSyncReady " + mName);
         }
@@ -456,7 +478,15 @@
      */
     public void addTransaction(@NonNull Transaction transaction) {
         synchronized (mLock) {
-            mTransaction.merge(transaction);
+            // If the caller tries to add a transaction to a completed SSG, just apply the
+            // transaction immediately since there's nothing to wait on.
+            if (mFinished) {
+                Log.w(TAG, "Adding transaction to a completed SurfaceSyncGroup(" + mName + "). "
+                        + " Applying immediately");
+                transaction.apply();
+            } else {
+                mTransaction.merge(transaction);
+            }
         }
     }
 
@@ -509,7 +539,7 @@
 
     private boolean addLocalSync(ISurfaceSyncGroup childSyncToken, boolean parentSyncGroupMerge) {
         if (DEBUG) {
-            Log.d(TAG, "Adding local sync " + mName);
+            Log.d(TAG, "Adding local sync to " + mName);
         }
 
         SurfaceSyncGroup childSurfaceSyncGroup = getSurfaceSyncGroup(childSyncToken);
@@ -540,7 +570,7 @@
     private void setTransactionCallbackFromParent(ISurfaceSyncGroup parentSyncGroup,
             ITransactionReadyCallback transactionReadyCallback) {
         if (DEBUG) {
-            Log.d(TAG, "setTransactionCallbackFromParent " + mName);
+            Log.d(TAG, "setTransactionCallbackFromParent for child " + mName);
         }
 
         if (Trace.isTagEnabled(Trace.TRACE_TAG_VIEW)) {
@@ -677,7 +707,7 @@
      */
     public ITransactionReadyCallback createTransactionReadyCallback(boolean parentSyncGroupMerge) {
         if (DEBUG) {
-            Log.d(TAG, "createTransactionReadyCallback " + mName);
+            Log.d(TAG, "createTransactionReadyCallback as part of " + mName);
         }
         ITransactionReadyCallback transactionReadyCallback =
                 new ITransactionReadyCallback.Stub() {
@@ -756,6 +786,21 @@
         }
     }
 
+    /**
+     * @hide
+     */
+    public void toggleTimeout(boolean enable) {
+        synchronized (mLock) {
+            mTimeoutDisabled = !enable;
+            if (mTimeoutAdded && !enable) {
+                mHandler.removeCallbacksAndMessages(this);
+                mTimeoutAdded = false;
+            } else if (!mTimeoutAdded && enable) {
+                addTimeout();
+            }
+        }
+    }
+
     private void addTimeout() {
         synchronized (sHandlerThreadLock) {
             if (sHandlerThread == null) {
@@ -765,7 +810,7 @@
         }
 
         synchronized (mLock) {
-            if (mTimeoutAdded) {
+            if (mTimeoutAdded || mTimeoutDisabled) {
                 // We only need one timeout for the entire SurfaceSyncGroup since we just want to
                 // ensure it doesn't stay stuck forever.
                 return;
@@ -780,7 +825,7 @@
 
         Runnable runnable = () -> {
             Log.e(TAG, "Failed to receive transaction ready in " + TRANSACTION_READY_TIMEOUT
-                    + "ms. Marking SurfaceSyncGroup as ready " + mName);
+                    + "ms. Marking SurfaceSyncGroup(" + mName + ") as ready");
             // Clear out any pending syncs in case the other syncs can't complete or timeout due to
             // a crash.
             synchronized (mLock) {
diff --git a/core/java/android/window/TaskConstants.java b/core/java/android/window/TaskConstants.java
index 3a04198..e18fd50 100644
--- a/core/java/android/window/TaskConstants.java
+++ b/core/java/android/window/TaskConstants.java
@@ -47,37 +47,31 @@
             -2 * TASK_CHILD_LAYER_REGION_SIZE;
 
     /**
-     * When a unresizable app is moved in the different configuration, a restart button appears
-     * allowing to adapt (~resize) app to the new configuration mocks.
+     * Compat UI components: reachability education, size compat restart
+     * button, letterbox education, restart dialog.
      * @hide
      */
-    public static final int TASK_CHILD_LAYER_SIZE_COMPAT_RESTART_BUTTON =
-            TASK_CHILD_LAYER_REGION_SIZE;
+    public static final int TASK_CHILD_LAYER_COMPAT_UI = TASK_CHILD_LAYER_REGION_SIZE;
 
-    /**
-     * Shown the first time an app is opened in size compat mode in landscape.
-     * @hide
-     */
-    public static final int TASK_CHILD_LAYER_LETTERBOX_EDUCATION = 2 * TASK_CHILD_LAYER_REGION_SIZE;
 
     /**
      * Captions, window frames and resize handlers around task windows.
      * @hide
      */
-    public static final int TASK_CHILD_LAYER_WINDOW_DECORATIONS = 3 * TASK_CHILD_LAYER_REGION_SIZE;
+    public static final int TASK_CHILD_LAYER_WINDOW_DECORATIONS = 2 * TASK_CHILD_LAYER_REGION_SIZE;
 
     /**
      * Overlays the task when going into PIP w/ gesture navigation.
      * @hide
      */
     public static final int TASK_CHILD_LAYER_RECENTS_ANIMATION_PIP_OVERLAY =
-            4 * TASK_CHILD_LAYER_REGION_SIZE;
+            3 * TASK_CHILD_LAYER_REGION_SIZE;
 
     /**
      * Allows other apps to add overlays on the task (i.e. game dashboard)
      * @hide
      */
-    public static final int TASK_CHILD_LAYER_TASK_OVERLAY = 5 * TASK_CHILD_LAYER_REGION_SIZE;
+    public static final int TASK_CHILD_LAYER_TASK_OVERLAY = 4 * TASK_CHILD_LAYER_REGION_SIZE;
 
     /**
      * Z-orders of task child layers other than activities, task fragments and layers interleaved
@@ -87,8 +81,7 @@
     @IntDef({
             TASK_CHILD_LAYER_TASK_BACKGROUND,
             TASK_CHILD_LAYER_LETTERBOX_BACKGROUND,
-            TASK_CHILD_LAYER_SIZE_COMPAT_RESTART_BUTTON,
-            TASK_CHILD_LAYER_LETTERBOX_EDUCATION,
+            TASK_CHILD_LAYER_COMPAT_UI,
             TASK_CHILD_LAYER_WINDOW_DECORATIONS,
             TASK_CHILD_LAYER_RECENTS_ANIMATION_PIP_OVERLAY,
             TASK_CHILD_LAYER_TASK_OVERLAY
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/AssistUtils.java b/core/java/com/android/internal/app/AssistUtils.java
index d4ff794..57cc38c 100644
--- a/core/java/com/android/internal/app/AssistUtils.java
+++ b/core/java/com/android/internal/app/AssistUtils.java
@@ -57,6 +57,8 @@
     public static final int INVOCATION_TYPE_HOME_BUTTON_LONG_PRESS = 5;
     /** value for INVOCATION_TYPE_KEY: long press on physical power button */
     public static final int INVOCATION_TYPE_POWER_BUTTON_LONG_PRESS = 6;
+    /** value for INVOCATION_TYPE_KEY: press on physcial assistant button */
+    public static final int INVOCATION_TYPE_ASSIST_BUTTON = 7;
 
     private final Context mContext;
     private final IVoiceInteractionManagerService mVoiceInteractionManagerService;
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/app/IHotwordRecognitionStatusCallback.aidl b/core/java/com/android/internal/app/IHotwordRecognitionStatusCallback.aidl
index ad0d1a4..3801188 100644
--- a/core/java/com/android/internal/app/IHotwordRecognitionStatusCallback.aidl
+++ b/core/java/com/android/internal/app/IHotwordRecognitionStatusCallback.aidl
@@ -20,6 +20,7 @@
 import android.service.voice.HotwordDetectedResult;
 import android.service.voice.HotwordDetectionServiceFailure;
 import android.service.voice.HotwordRejectedResult;
+import android.service.voice.SoundTriggerFailure;
 import android.service.voice.VisualQueryDetectionServiceFailure;
 
 /**
@@ -57,13 +58,6 @@
     void onRejected(in HotwordRejectedResult result);
 
     /**
-     * Called when the detection fails due to an error.
-     *
-     * @param status The error code that was seen.
-     */
-    void onError(int status);
-
-    /**
      * Called when the detection fails due to an error occurs in the
      * {@link HotwordDetectionService}.
      *
@@ -84,6 +78,15 @@
         in VisualQueryDetectionServiceFailure visualQueryDetectionServiceFailure);
 
     /**
+     * Called when the detection fails due to an error occurs in the
+     * {@link com.android.server.soundtrigger.SoundTriggerService}.
+     *
+     * @param soundTriggerFailure It provides the error code, error message and
+     *                                           suggested action.
+     */
+    void onSoundTriggerFailure(in SoundTriggerFailure soundTriggerFailure);
+
+    /**
      * Called when the detection fails due to an unknown error occurs.
      *
      * @param errorMessage It provides the error message.
diff --git a/core/java/com/android/internal/app/OWNERS b/core/java/com/android/internal/app/OWNERS
index a1d571f..52f18fb 100644
--- a/core/java/com/android/internal/app/OWNERS
+++ b/core/java/com/android/internal/app/OWNERS
@@ -1,15 +1,16 @@
 per-file *AppOp* = file:/core/java/android/permission/OWNERS
 per-file UnlaunchableAppActivity.java = file:/core/java/android/app/admin/WorkProfile_OWNERS
 per-file IntentForwarderActivity.java = file:/core/java/android/app/admin/WorkProfile_OWNERS
-per-file *Resolver* = file:/packages/SystemUI/OWNERS
-per-file *Chooser* = file:/packages/SystemUI/OWNERS
-per-file SimpleIconFactory.java = file:/packages/SystemUI/OWNERS
-per-file AbstractMultiProfilePagerAdapter.java = file:/packages/SystemUI/OWNERS
-per-file *EmptyStateProvider.java = file:/packages/SystemUI/OWNERS
 per-file NetInitiatedActivity.java = file:/location/java/android/location/OWNERS
 per-file *BatteryStats* = file:/BATTERY_STATS_OWNERS
 per-file *SoundTrigger* = file:/media/java/android/media/soundtrigger/OWNERS
 
+# Chooser and Resolver.
+per-file *Chooser* = file:chooser/OWNERS
+per-file *Resolver* = file:chooser/OWNERS
+per-file SimpleIconFactory.java = file:chooser/OWNERS
+per-file AbstractMultiProfilePagerAdapter.java = file:chooser/OWNERS
+per-file *EmptyStateProvider.java = file:chooser/OWNERS
 
 # Voice Interaction
 per-file *Assist* = file:/core/java/android/service/voice/OWNERS
diff --git a/core/java/com/android/internal/app/chooser/OWNERS b/core/java/com/android/internal/app/chooser/OWNERS
index a6f1632..0844cfa 100644
--- a/core/java/com/android/internal/app/chooser/OWNERS
+++ b/core/java/com/android/internal/app/chooser/OWNERS
@@ -1 +1,3 @@
-file:/packages/SystemUI/OWNERS
\ No newline at end of file
+# Bug component: 324112
+
+include platform/packages/modules/IntentResolver:/OWNERS
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/display/RefreshRateSettingsUtils.java b/core/java/com/android/internal/display/RefreshRateSettingsUtils.java
new file mode 100644
index 0000000..39d8380
--- /dev/null
+++ b/core/java/com/android/internal/display/RefreshRateSettingsUtils.java
@@ -0,0 +1,92 @@
+/*
+ * 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.display;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.hardware.display.DisplayManager;
+import android.provider.Settings;
+import android.util.Log;
+import android.view.Display;
+
+/**
+ * Constants and utility methods for refresh rate settings.
+ */
+public class RefreshRateSettingsUtils {
+
+    private static final String TAG = "RefreshRateSettingsUtils";
+
+    public static final float DEFAULT_REFRESH_RATE = 60f;
+
+    /**
+     * Find the highest refresh rate among all the modes of the default display.
+     * @param context The context
+     * @return The highest refresh rate
+     */
+    public static float findHighestRefreshRateForDefaultDisplay(Context context) {
+        final DisplayManager dm = context.getSystemService(DisplayManager.class);
+        final Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);
+
+        if (display == null) {
+            Log.w(TAG, "No valid default display device");
+            return DEFAULT_REFRESH_RATE;
+        }
+
+        float maxRefreshRate = DEFAULT_REFRESH_RATE;
+        for (Display.Mode mode : display.getSupportedModes()) {
+            if (Math.round(mode.getRefreshRate()) > maxRefreshRate) {
+                maxRefreshRate = mode.getRefreshRate();
+            }
+        }
+        return maxRefreshRate;
+    }
+
+    /**
+     * Get the min refresh rate which is determined by
+     * {@link Settings.System.FORCE_PEAK_REFRESH_RATE}.
+     * @param context The context
+     * @return The min refresh rate
+     */
+    public static float getMinRefreshRate(Context context) {
+        final ContentResolver cr = context.getContentResolver();
+        int forcePeakRefreshRateSetting = Settings.System.getIntForUser(cr,
+                Settings.System.FORCE_PEAK_REFRESH_RATE, -1, cr.getUserId());
+        return forcePeakRefreshRateSetting == 1
+                ? findHighestRefreshRateForDefaultDisplay(context)
+                : 0;
+    }
+
+    /**
+     * Get the peak refresh rate which is determined by {@link Settings.System.SMOOTH_DISPLAY}.
+     * @param context The context
+     * @param defaultPeakRefreshRate The refresh rate to return if the setting doesn't have a value
+     * @return The peak refresh rate
+     */
+    public static float getPeakRefreshRate(Context context, float defaultPeakRefreshRate) {
+        final ContentResolver cr = context.getContentResolver();
+        int smoothDisplaySetting = Settings.System.getIntForUser(cr,
+                Settings.System.SMOOTH_DISPLAY, -1, cr.getUserId());
+        switch (smoothDisplaySetting) {
+            case 0:
+                return DEFAULT_REFRESH_RATE;
+            case 1:
+                return findHighestRefreshRateForDefaultDisplay(context);
+            default:
+                return defaultPeakRefreshRate;
+        }
+    }
+}
diff --git a/core/java/com/android/internal/expresslog/Counter.java b/core/java/com/android/internal/expresslog/Counter.java
deleted file mode 100644
index 4a46d91..0000000
--- a/core/java/com/android/internal/expresslog/Counter.java
+++ /dev/null
@@ -1,71 +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.internal.expresslog;
-
-import android.annotation.NonNull;
-
-import com.android.internal.util.FrameworkStatsLog;
-
-/** Counter encapsulates StatsD write API calls */
-public final class Counter {
-
-    // Not instantiable.
-    private Counter() {}
-
-    /**
-     * Increments Telemetry Express Counter metric by 1
-     * @param metricId to log, no-op if metricId is not defined in the TeX catalog
-     * @hide
-     */
-    public static void logIncrement(@NonNull String metricId) {
-        logIncrement(metricId, 1);
-    }
-
-    /**
-     * Increments Telemetry Express Counter metric by 1
-     * @param metricId to log, no-op if metricId is not defined in the TeX catalog
-     * @param uid used as a dimension for the count metric
-     * @hide
-     */
-    public static void logIncrementWithUid(@NonNull String metricId, int uid) {
-        logIncrementWithUid(metricId, uid, 1);
-    }
-
-    /**
-     * Increments Telemetry Express Counter metric by arbitrary value
-     * @param metricId to log, no-op if metricId is not defined in the TeX catalog
-     * @param amount to increment counter
-     * @hide
-     */
-    public static void logIncrement(@NonNull String metricId, long amount) {
-        final long metricIdHash = Utils.hashString(metricId);
-        FrameworkStatsLog.write(FrameworkStatsLog.EXPRESS_EVENT_REPORTED, metricIdHash, amount);
-    }
-
-    /**
-     * Increments Telemetry Express Counter metric by arbitrary value
-     * @param metricId to log, no-op if metricId is not defined in the TeX catalog
-     * @param uid used as a dimension for the count metric
-     * @param amount to increment counter
-     * @hide
-     */
-    public static void logIncrementWithUid(@NonNull String metricId, int uid, long amount) {
-        final long metricIdHash = Utils.hashString(metricId);
-        FrameworkStatsLog.write(
-                FrameworkStatsLog.EXPRESS_UID_EVENT_REPORTED, metricIdHash, amount, uid);
-    }
-}
diff --git a/core/java/com/android/internal/expresslog/Histogram.java b/core/java/com/android/internal/expresslog/Histogram.java
deleted file mode 100644
index 2fe784a..0000000
--- a/core/java/com/android/internal/expresslog/Histogram.java
+++ /dev/null
@@ -1,234 +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.internal.expresslog;
-
-import android.annotation.FloatRange;
-import android.annotation.IntRange;
-import android.annotation.NonNull;
-
-import com.android.internal.util.FrameworkStatsLog;
-
-import java.util.Arrays;
-
-/** Histogram encapsulates StatsD write API calls */
-public final class Histogram {
-
-    private final long mMetricIdHash;
-    private final BinOptions mBinOptions;
-
-    /**
-     * Creates Histogram metric logging wrapper
-     *
-     * @param metricId   to log, logging will be no-op if metricId is not defined in the TeX catalog
-     * @param binOptions to calculate bin index for samples
-     * @hide
-     */
-    public Histogram(@NonNull String metricId, @NonNull BinOptions binOptions) {
-        mMetricIdHash = Utils.hashString(metricId);
-        mBinOptions = binOptions;
-    }
-
-    /**
-     * Logs increment sample count for automatically calculated bin
-     *
-     * @param sample value
-     * @hide
-     */
-    public void logSample(float sample) {
-        final int binIndex = mBinOptions.getBinForSample(sample);
-        FrameworkStatsLog.write(FrameworkStatsLog.EXPRESS_HISTOGRAM_SAMPLE_REPORTED, mMetricIdHash,
-                /*count*/ 1, binIndex);
-    }
-
-    /**
-     * Logs increment sample count for automatically calculated bin
-     *
-     * @param uid used as a dimension for the count metric
-     * @param sample value
-     * @hide
-     */
-    public void logSampleWithUid(int uid, float sample) {
-        final int binIndex = mBinOptions.getBinForSample(sample);
-        FrameworkStatsLog.write(FrameworkStatsLog.EXPRESS_UID_HISTOGRAM_SAMPLE_REPORTED,
-                mMetricIdHash, /*count*/ 1, binIndex, uid);
-    }
-
-    /** Used by Histogram to map data sample to corresponding bin */
-    public interface BinOptions {
-        /**
-         * Returns bins count to be used by a histogram
-         *
-         * @return bins count used to initialize Options, including overflow & underflow bins
-         * @hide
-         */
-        int getBinsCount();
-
-        /**
-         * Returns bin index for the input sample value
-         * index == 0 stands for underflow
-         * index == getBinsCount() - 1 stands for overflow
-         *
-         * @return zero based index
-         * @hide
-         */
-        int getBinForSample(float sample);
-    }
-
-    /** Used by Histogram to map data sample to corresponding bin for uniform bins */
-    public static final class UniformOptions implements BinOptions {
-
-        private final int mBinCount;
-        private final float mMinValue;
-        private final float mExclusiveMaxValue;
-        private final float mBinSize;
-
-        /**
-         * Creates options for uniform (linear) sized bins
-         *
-         * @param binCount          amount of histogram bins. 2 bin indexes will be calculated
-         *                          automatically to represent underflow & overflow bins
-         * @param minValue          is included in the first bin, values less than minValue
-         *                          go to underflow bin
-         * @param exclusiveMaxValue is included in the overflow bucket. For accurate
-         *                          measure up to kMax, then exclusiveMaxValue
-         *                          should be set to kMax + 1
-         * @hide
-         */
-        public UniformOptions(@IntRange(from = 1) int binCount, float minValue,
-                float exclusiveMaxValue) {
-            if (binCount < 1) {
-                throw new IllegalArgumentException("Bin count should be positive number");
-            }
-
-            if (exclusiveMaxValue <= minValue) {
-                throw new IllegalArgumentException("Bins range invalid (maxValue < minValue)");
-            }
-
-            mMinValue = minValue;
-            mExclusiveMaxValue = exclusiveMaxValue;
-            mBinSize = (mExclusiveMaxValue - minValue) / binCount;
-
-            // Implicitly add 2 for the extra underflow & overflow bins
-            mBinCount = binCount + 2;
-        }
-
-        @Override
-        public int getBinsCount() {
-            return mBinCount;
-        }
-
-        @Override
-        public int getBinForSample(float sample) {
-            if (sample < mMinValue) {
-                // goes to underflow
-                return 0;
-            } else if (sample >= mExclusiveMaxValue) {
-                // goes to overflow
-                return mBinCount - 1;
-            }
-            return (int) ((sample - mMinValue) / mBinSize + 1);
-        }
-    }
-
-    /** Used by Histogram to map data sample to corresponding bin for scaled bins */
-    public static final class ScaledRangeOptions implements BinOptions {
-        // store minimum value per bin
-        final long[] mBins;
-
-        /**
-         * Creates options for scaled range bins
-         *
-         * @param binCount      amount of histogram bins. 2 bin indexes will be calculated
-         *                      automatically to represent underflow & overflow bins
-         * @param minValue      is included in the first bin, values less than minValue
-         *                      go to underflow bin
-         * @param firstBinWidth used to represent first bin width and as a reference to calculate
-         *                      width for consecutive bins
-         * @param scaleFactor   used to calculate width for consecutive bins
-         * @hide
-         */
-        public ScaledRangeOptions(@IntRange(from = 1) int binCount, int minValue,
-                @FloatRange(from = 1.f) float firstBinWidth,
-                @FloatRange(from = 1.f) float scaleFactor) {
-            if (binCount < 1) {
-                throw new IllegalArgumentException("Bin count should be positive number");
-            }
-
-            if (firstBinWidth < 1.f) {
-                throw new IllegalArgumentException(
-                        "First bin width invalid (should be 1.f at minimum)");
-            }
-
-            if (scaleFactor < 1.f) {
-                throw new IllegalArgumentException(
-                        "Scaled factor invalid (should be 1.f at minimum)");
-            }
-
-            // precalculating bins ranges (no need to create a bin for underflow reference value)
-            mBins = initBins(binCount + 1, minValue, firstBinWidth, scaleFactor);
-        }
-
-        @Override
-        public int getBinsCount() {
-            return mBins.length + 1;
-        }
-
-        @Override
-        public int getBinForSample(float sample) {
-            if (sample < mBins[0]) {
-                // goes to underflow
-                return 0;
-            } else if (sample >= mBins[mBins.length - 1]) {
-                // goes to overflow
-                return mBins.length;
-            }
-
-            return lower_bound(mBins, (long) sample) + 1;
-        }
-
-        // To find lower bound using binary search implementation of Arrays utility class
-        private static int lower_bound(long[] array, long sample) {
-            int index = Arrays.binarySearch(array, sample);
-            // If key is not present in the array
-            if (index < 0) {
-                // Index specify the position of the key when inserted in the sorted array
-                // so the element currently present at this position will be the lower bound
-                return Math.abs(index) - 2;
-            }
-            return index;
-        }
-
-        private static long[] initBins(int count, int minValue, float firstBinWidth,
-                float scaleFactor) {
-            long[] bins = new long[count];
-            bins[0] = minValue;
-            double lastWidth = firstBinWidth;
-            for (int i = 1; i < count; i++) {
-                // current bin minValue = previous bin width * scaleFactor
-                double currentBinMinValue = bins[i - 1] + lastWidth;
-                if (currentBinMinValue > Integer.MAX_VALUE) {
-                    throw new IllegalArgumentException(
-                        "Attempted to create a bucket larger than maxint");
-                }
-
-                bins[i] = (long) currentBinMinValue;
-                lastWidth *= scaleFactor;
-            }
-            return bins;
-        }
-    }
-}
diff --git a/core/java/com/android/internal/expresslog/OWNERS b/core/java/com/android/internal/expresslog/OWNERS
deleted file mode 100644
index ee865b1..0000000
--- a/core/java/com/android/internal/expresslog/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-include /services/core/java/com/android/server/stats/OWNERS
diff --git a/core/java/com/android/internal/expresslog/TEST_MAPPING b/core/java/com/android/internal/expresslog/TEST_MAPPING
deleted file mode 100644
index c9b0cf8..0000000
--- a/core/java/com/android/internal/expresslog/TEST_MAPPING
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "presubmit": [
-    {
-      "name": "ExpressLogTests",
-      "options": [
-        {
-          "exclude-annotation": "org.junit.Ignore"
-        }
-      ]
-    }
-  ]
-}
\ No newline at end of file
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..80f540c 100644
--- a/core/java/com/android/internal/jank/FrameTracker.java
+++ b/core/java/com/android/internal/jank/FrameTracker.java
@@ -36,6 +36,7 @@
 import android.os.Handler;
 import android.os.Trace;
 import android.text.TextUtils;
+import android.util.DisplayMetrics;
 import android.util.Log;
 import android.util.SparseArray;
 import android.view.Choreographer;
@@ -43,7 +44,9 @@
 import android.view.SurfaceControl;
 import android.view.SurfaceControl.JankData.JankType;
 import android.view.ThreadedRenderer;
+import android.view.View;
 import android.view.ViewRootImpl;
+import android.view.WindowCallbacks;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.jank.InteractionJankMonitor.Configuration;
@@ -66,7 +69,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 +298,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 +329,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 +358,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 +411,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 +436,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 +580,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 +630,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 +638,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());
                 }
@@ -679,6 +689,14 @@
         }
     }
 
+    ThreadedRendererWrapper getThreadedRenderer() {
+        return mRendererWrapper;
+    }
+
+    ViewRootWrapper getViewRoot() {
+        return mViewRoot;
+    }
+
     private boolean shouldTriggerPerfetto(int missedFramesCount, int maxFrameTimeNanos) {
         boolean overMissedFramesThreshold = mTraceThresholdMissedFrames != -1
                 && missedFramesCount >= mTraceThresholdMissedFrames;
@@ -791,6 +809,28 @@
         public SurfaceControl getSurfaceControl() {
             return mViewRoot.getSurfaceControl();
         }
+
+        void requestInvalidateRootRenderNode() {
+            mViewRoot.requestInvalidateRootRenderNode();
+        }
+
+        void addWindowCallbacks(WindowCallbacks windowCallbacks) {
+            mViewRoot.addWindowCallbacks(windowCallbacks);
+        }
+
+        void removeWindowCallbacks(WindowCallbacks windowCallbacks) {
+            mViewRoot.removeWindowCallbacks(windowCallbacks);
+        }
+
+        View getView() {
+            return mViewRoot.getView();
+        }
+
+        int dipToPx(int dip) {
+            final DisplayMetrics displayMetrics =
+                    mViewRoot.mContext.getResources().getDisplayMetrics();
+            return (int) (displayMetrics.density * dip + 0.5f);
+        }
     }
 
     public static class SurfaceControlWrapper {
diff --git a/core/java/com/android/internal/jank/InteractionJankMonitor.java b/core/java/com/android/internal/jank/InteractionJankMonitor.java
index 4b9e77e..c769fb9 100644
--- a/core/java/com/android/internal/jank/InteractionJankMonitor.java
+++ b/core/java/com/android/internal/jank/InteractionJankMonitor.java
@@ -97,6 +97,7 @@
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__WALLPAPER_TRANSITION;
 
 import android.Manifest;
+import android.annotation.ColorInt;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.RequiresPermission;
@@ -104,6 +105,7 @@
 import android.annotation.WorkerThread;
 import android.app.ActivityThread;
 import android.content.Context;
+import android.graphics.Color;
 import android.os.Build;
 import android.os.Handler;
 import android.os.HandlerExecutor;
@@ -143,6 +145,14 @@
  * adb shell device_config put interaction_jank_monitor enabled true
  * adb shell device_config put interaction_jank_monitor sampling_interval 1
  *
+ * On debuggable builds, an overlay can be used to display the name of the
+ * currently running cuj using:
+ *
+ * adb shell device_config put interaction_jank_monitor debug_overlay_enabled true
+ *
+ * NOTE: The overlay will interfere with metrics, so it should only be used
+ * for understanding which UI events correspeond to which CUJs.
+ *
  * @hide
  */
 public class InteractionJankMonitor {
@@ -159,6 +169,7 @@
             "trace_threshold_missed_frames";
     private static final String SETTINGS_THRESHOLD_FRAME_TIME_MILLIS_KEY =
             "trace_threshold_frame_time_millis";
+    private static final String SETTINGS_DEBUG_OVERLAY_ENABLED_KEY = "debug_overlay_enabled";
     /** Default to being enabled on debug builds. */
     private static final boolean DEFAULT_ENABLED = Build.IS_DEBUGGABLE;
     /** Default to collecting data for all CUJs. */
@@ -166,6 +177,7 @@
     /** Default to triggering trace if 3 frames are missed OR a frame takes at least 64ms */
     private static final int DEFAULT_TRACE_THRESHOLD_MISSED_FRAMES = 3;
     private static final int DEFAULT_TRACE_THRESHOLD_FRAME_TIME_MILLIS = 64;
+    private static final boolean DEFAULT_DEBUG_OVERLAY_ENABLED = false;
 
     @VisibleForTesting
     public static final int MAX_LENGTH_OF_CUJ_NAME = 80;
@@ -343,6 +355,9 @@
     private final HandlerThread mWorker;
     private final DisplayResolutionTracker mDisplayResolutionTracker;
     private final Object mLock = new Object();
+    private @ColorInt int mDebugBgColor = Color.CYAN;
+    private double mDebugYOffset = 0.1;
+    private InteractionMonitorDebugOverlay mDebugOverlay;
 
     private volatile boolean mEnabled = DEFAULT_ENABLED;
     private int mSamplingInterval = DEFAULT_SAMPLING_INTERVAL;
@@ -533,7 +548,7 @@
         if (needRemoveTasks(action, session)) {
             getTracker(session.getCuj()).getHandler().runWithScissors(() -> {
                 removeTimeout(session.getCuj());
-                removeTracker(session.getCuj());
+                removeTracker(session.getCuj(), session.getReason());
             }, EXECUTOR_TASK_TIMEOUT);
         }
     }
@@ -699,7 +714,7 @@
         if (tracker == null) return false;
         // if the end call doesn't return true, another thread is handling end of the cuj.
         if (tracker.end(REASON_END_NORMAL)) {
-            removeTracker(cujType);
+            removeTracker(cujType, REASON_END_NORMAL);
         }
         return true;
     }
@@ -750,7 +765,7 @@
         if (tracker == null) return false;
         // if the cancel call doesn't return true, another thread is handling cancel of the cuj.
         if (tracker.cancel(reason)) {
-            removeTracker(cujType);
+            removeTracker(cujType, reason);
         }
         return true;
     }
@@ -758,6 +773,13 @@
     private void putTracker(@CujType int cuj, @NonNull FrameTracker tracker) {
         synchronized (mLock) {
             mRunningTrackers.put(cuj, tracker);
+            if (mDebugOverlay != null) {
+                mDebugOverlay.onTrackerAdded(cuj, tracker.getViewRoot());
+            }
+            if (DEBUG) {
+                Log.d(TAG, "Added tracker for " + getNameOfCuj(cuj)
+                        + ". mRunningTrackers=" + listNamesOfCujs(mRunningTrackers));
+            }
         }
     }
 
@@ -767,9 +789,16 @@
         }
     }
 
-    private void removeTracker(@CujType int cuj) {
+    private void removeTracker(@CujType int cuj, int reason) {
         synchronized (mLock) {
             mRunningTrackers.remove(cuj);
+            if (mDebugOverlay != null) {
+                mDebugOverlay.onTrackerRemoved(cuj, reason, mRunningTrackers);
+            }
+            if (DEBUG) {
+                Log.d(TAG, "Removed tracker for " + getNameOfCuj(cuj)
+                        + ". mRunningTrackers=" + listNamesOfCujs(mRunningTrackers));
+            }
         }
     }
 
@@ -782,6 +811,16 @@
         mTraceThresholdFrameTimeMillis = properties.getInt(
                 SETTINGS_THRESHOLD_FRAME_TIME_MILLIS_KEY,
                 DEFAULT_TRACE_THRESHOLD_FRAME_TIME_MILLIS);
+        // Never allow the debug overlay to be used on user builds
+        boolean debugOverlayEnabled = Build.IS_DEBUGGABLE && properties.getBoolean(
+                SETTINGS_DEBUG_OVERLAY_ENABLED_KEY,
+                DEFAULT_DEBUG_OVERLAY_ENABLED);
+        if (debugOverlayEnabled && mDebugOverlay == null) {
+            mDebugOverlay = new InteractionMonitorDebugOverlay(mDebugBgColor, mDebugYOffset);
+        } else if (!debugOverlayEnabled && mDebugOverlay != null) {
+            mDebugOverlay.dispose();
+            mDebugOverlay = null;
+        }
         // The memory visibility is powered by the volatile field, mEnabled.
         mEnabled = properties.getBoolean(SETTINGS_ENABLED_KEY, DEFAULT_ENABLED);
     }
@@ -822,6 +861,39 @@
     }
 
     /**
+     * Configures the debug overlay used for displaying interaction names on the screen while they
+     * occur.
+     *
+     * @param bgColor the background color of the box used to display the CUJ names
+     * @param yOffset number between 0 and 1 to indicate where the top of the box should be relative
+     *                to the height of the screen
+     */
+    public void configDebugOverlay(@ColorInt int bgColor, double yOffset) {
+        mDebugBgColor = bgColor;
+        mDebugYOffset = yOffset;
+    }
+
+    /**
+     * A helper method for getting a string representation of all running CUJs. For example,
+     * "(LOCKSCREEN_TRANSITION_FROM_AOD, IME_INSETS_ANIMATION)"
+     */
+    private static String listNamesOfCujs(SparseArray<FrameTracker> trackers) {
+        if (!DEBUG) {
+            return null;
+        }
+        StringBuilder sb = new StringBuilder();
+        sb.append('(');
+        for (int i = 0; i < trackers.size(); i++) {
+            sb.append(getNameOfCuj(trackers.keyAt(i)));
+            if (i < trackers.size() - 1) {
+                sb.append(", ");
+            }
+        }
+        sb.append(')');
+        return sb.toString();
+    }
+
+    /**
      * A helper method to translate CUJ type to CUJ name.
      *
      * @param cujType the cuj type defined in this file
diff --git a/core/java/com/android/internal/jank/InteractionMonitorDebugOverlay.java b/core/java/com/android/internal/jank/InteractionMonitorDebugOverlay.java
new file mode 100644
index 0000000..99b9f2f
--- /dev/null
+++ b/core/java/com/android/internal/jank/InteractionMonitorDebugOverlay.java
@@ -0,0 +1,240 @@
+/*
+ * 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.jank;
+
+import static com.android.internal.jank.FrameTracker.REASON_END_NORMAL;
+
+import android.annotation.ColorInt;
+import android.app.ActivityThread;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RecordingCanvas;
+import android.graphics.Rect;
+import android.os.Trace;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.view.WindowCallbacks;
+
+import com.android.internal.jank.FrameTracker.Reasons;
+import com.android.internal.jank.InteractionJankMonitor.CujType;
+
+/**
+ * An overlay that uses WindowCallbacks to draw the names of all running CUJs to the window
+ * associated with one of the CUJs being tracked. There's no guarantee which window it will
+ * draw to. NOTE: sometimes the CUJ names will remain displayed on the screen longer than they
+ * are actually running.
+ * <p>
+ * CUJ names will be drawn as follows:
+ * <ul>
+ * <li> Normal text indicates the CUJ is currently running
+ * <li> Grey text indicates the CUJ ended normally and is no longer running
+ * <li> Red text with a strikethrough indicates the CUJ was canceled or ended abnormally
+ * </ul>
+ */
+class InteractionMonitorDebugOverlay implements WindowCallbacks {
+    private static final int REASON_STILL_RUNNING = -1000;
+    // Sparse array where the key in the CUJ and the value is the session status, or null if
+    // it's currently running
+    private final SparseIntArray mRunningCujs = new SparseIntArray();
+    private FrameTracker.ViewRootWrapper mViewRoot = null;
+    private final Paint mDebugPaint;
+    private final Paint.FontMetrics mDebugFontMetrics;
+    // Used to display the overlay in a different color and position for different processes.
+    // Otherwise, two overlays will overlap and be difficult to read.
+    private final int mBgColor;
+    private final double mYOffset;
+    private final String mPackageName;
+
+    InteractionMonitorDebugOverlay(@ColorInt int bgColor, double yOffset) {
+        mBgColor = bgColor;
+        mYOffset = yOffset;
+        mDebugPaint = new Paint();
+        mDebugPaint.setAntiAlias(false);
+        mDebugFontMetrics = new Paint.FontMetrics();
+        final Context context = ActivityThread.currentApplication();
+        mPackageName = context.getPackageName();
+    }
+
+    void dispose() {
+        if (mViewRoot != null) {
+            mViewRoot.removeWindowCallbacks(this);
+            forceRedraw();
+        }
+        mViewRoot = null;
+    }
+
+    private boolean attachViewRootIfNeeded(FrameTracker.ViewRootWrapper viewRoot) {
+        if (mViewRoot == null && viewRoot != null) {
+            mViewRoot = viewRoot;
+            viewRoot.addWindowCallbacks(this);
+            forceRedraw();
+            return true;
+        }
+        return false;
+    }
+
+    private float getWidthOfLongestCujName(int cujFontSize) {
+        mDebugPaint.setTextSize(cujFontSize);
+        float maxLength = 0;
+        for (int i = 0; i < mRunningCujs.size(); i++) {
+            String cujName = InteractionJankMonitor.getNameOfCuj(mRunningCujs.keyAt(i));
+            float textLength = mDebugPaint.measureText(cujName);
+            if (textLength > maxLength) {
+                maxLength = textLength;
+            }
+        }
+        return maxLength;
+    }
+
+    private float getTextHeight(int textSize) {
+        mDebugPaint.setTextSize(textSize);
+        mDebugPaint.getFontMetrics(mDebugFontMetrics);
+        return mDebugFontMetrics.descent - mDebugFontMetrics.ascent;
+    }
+
+    private int dipToPx(int dip) {
+        if (mViewRoot != null) {
+            return mViewRoot.dipToPx(dip);
+        } else {
+            return dip;
+        }
+    }
+
+    private void forceRedraw() {
+        if (mViewRoot != null) {
+            mViewRoot.requestInvalidateRootRenderNode();
+            mViewRoot.getView().invalidate();
+        }
+    }
+
+    void onTrackerRemoved(@CujType int removedCuj, @Reasons int reason,
+                          SparseArray<FrameTracker> runningTrackers) {
+        mRunningCujs.put(removedCuj, reason);
+        // If REASON_STILL_RUNNING is not in mRunningCujs, then all CUJs have ended
+        if (mRunningCujs.indexOfValue(REASON_STILL_RUNNING) < 0) {
+            mRunningCujs.clear();
+            dispose();
+        } else {
+            boolean needsNewViewRoot = true;
+            if (mViewRoot != null) {
+                // Check to see if this viewroot is still associated with one of the running
+                // trackers
+                for (int i = 0; i < runningTrackers.size(); i++) {
+                    if (mViewRoot.equals(
+                            runningTrackers.valueAt(i).getViewRoot())) {
+                        needsNewViewRoot = false;
+                        break;
+                    }
+                }
+            }
+            if (needsNewViewRoot) {
+                dispose();
+                for (int i = 0; i < runningTrackers.size(); i++) {
+                    if (attachViewRootIfNeeded(runningTrackers.valueAt(i).getViewRoot())) {
+                        break;
+                    }
+                }
+            } else {
+                forceRedraw();
+            }
+        }
+    }
+
+    void onTrackerAdded(@CujType int addedCuj, FrameTracker.ViewRootWrapper viewRoot) {
+        // Use REASON_STILL_RUNNING (not technically one of the '@Reasons') to indicate the CUJ
+        // is still running
+        mRunningCujs.put(addedCuj, REASON_STILL_RUNNING);
+        attachViewRootIfNeeded(viewRoot);
+        forceRedraw();
+    }
+
+    @Override
+    public void onWindowSizeIsChanging(Rect newBounds, boolean fullscreen,
+                                       Rect systemInsets, Rect stableInsets) {
+    }
+
+    @Override
+    public void onWindowDragResizeStart(Rect initialBounds, boolean fullscreen,
+                                        Rect systemInsets, Rect stableInsets) {
+    }
+
+    @Override
+    public void onWindowDragResizeEnd() {
+    }
+
+    @Override
+    public boolean onContentDrawn(int offsetX, int offsetY, int sizeX, int sizeY) {
+        return false;
+    }
+
+    @Override
+    public void onRequestDraw(boolean reportNextDraw) {
+    }
+
+    @Override
+    public void onPostDraw(RecordingCanvas canvas) {
+        Trace.beginSection("InteractionJankMonitor#drawDebug");
+        final int padding = dipToPx(5);
+        final int h = canvas.getHeight();
+        final int w = canvas.getWidth();
+        // Draw sysui CUjs near the bottom of the screen so they don't overlap with the shade,
+        // and draw launcher CUJs near the top of the screen so they don't overlap with gestures
+        final int dy = (int) (h * mYOffset);
+        int packageNameFontSize = dipToPx(12);
+        int cujFontSize = dipToPx(18);
+        final float cujNameTextHeight = getTextHeight(cujFontSize);
+        final float packageNameTextHeight = getTextHeight(packageNameFontSize);
+        float maxLength = getWidthOfLongestCujName(cujFontSize);
+
+        final int dx = (int) ((w - maxLength) / 2f);
+        canvas.translate(dx, dy);
+        // Draw background rectangle for displaying the text showing the CUJ name
+        mDebugPaint.setColor(mBgColor);
+        canvas.drawRect(
+                -padding * 2, // more padding on top so we can draw the package name
+                -padding,
+                padding * 2 + maxLength,
+                padding * 2 + packageNameTextHeight + cujNameTextHeight * mRunningCujs.size(),
+                mDebugPaint);
+        mDebugPaint.setTextSize(packageNameFontSize);
+        mDebugPaint.setColor(Color.BLACK);
+        mDebugPaint.setStrikeThruText(false);
+        canvas.translate(0, packageNameTextHeight);
+        canvas.drawText("package:" + mPackageName, 0, 0, mDebugPaint);
+        mDebugPaint.setTextSize(cujFontSize);
+        // Draw text for CUJ names
+        for (int i = 0; i < mRunningCujs.size(); i++) {
+            int status = mRunningCujs.valueAt(i);
+            if (status == REASON_STILL_RUNNING) {
+                mDebugPaint.setColor(Color.BLACK);
+                mDebugPaint.setStrikeThruText(false);
+            } else if (status == REASON_END_NORMAL) {
+                mDebugPaint.setColor(Color.GRAY);
+                mDebugPaint.setStrikeThruText(false);
+            } else {
+                // Cancelled, or otherwise ended for a bad reason
+                mDebugPaint.setColor(Color.RED);
+                mDebugPaint.setStrikeThruText(true);
+            }
+            String cujName = InteractionJankMonitor.getNameOfCuj(mRunningCujs.keyAt(i));
+            canvas.translate(0, cujNameTextHeight);
+            canvas.drawText(cujName, 0, 0, mDebugPaint);
+        }
+        Trace.endSection();
+    }
+}
diff --git a/core/java/com/android/internal/os/KernelSingleProcessCpuThreadReader.java b/core/java/com/android/internal/os/KernelSingleProcessCpuThreadReader.java
index e2c096c1..aa6b1c0 100644
--- a/core/java/com/android/internal/os/KernelSingleProcessCpuThreadReader.java
+++ b/core/java/com/android/internal/os/KernelSingleProcessCpuThreadReader.java
@@ -20,7 +20,7 @@
 import android.util.Slog;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.expresslog.Counter;
+import com.android.modules.expresslog.Counter;
 
 import java.io.IOException;
 import java.util.Arrays;
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index cee8c1a..3633d91 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -1018,7 +1018,7 @@
      * Applies debugger system properties to the zygote arguments.
      *
      * For eng builds all apps are debuggable. On userdebug and user builds
-     * if persist.debuggable.dalvik.vm.jdwp.enabled is 1 all apps are
+     * if persist.debug.dalvik.vm.jdwp.enabled is 1 all apps are
      * debuggable. Otherwise, the debugger state is specified via the
      * "--enable-jdwp" flag in the spawn request.
      *
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/policy/TransitionAnimation.java b/core/java/com/android/internal/policy/TransitionAnimation.java
index 1172f7b..aa2318d 100644
--- a/core/java/com/android/internal/policy/TransitionAnimation.java
+++ b/core/java/com/android/internal/policy/TransitionAnimation.java
@@ -50,6 +50,7 @@
 import android.media.ImageReader;
 import android.os.SystemProperties;
 import android.util.Slog;
+import android.view.InflateException;
 import android.view.SurfaceControl;
 import android.view.WindowManager.LayoutParams;
 import android.view.WindowManager.TransitionOldType;
@@ -1264,7 +1265,7 @@
     public static Animation loadAnimationSafely(Context context, int resId, String tag) {
         try {
             return AnimationUtils.loadAnimation(context, resId);
-        } catch (Resources.NotFoundException e) {
+        } catch (Resources.NotFoundException | InflateException e) {
             Slog.w(tag, "Unable to load animation resource", e);
             return null;
         }
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 fc26766..42d6896 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -225,7 +225,6 @@
                 "android_security_Scrypt.cpp",
                 "com_android_internal_content_om_OverlayConfig.cpp",
                 "com_android_internal_content_om_OverlayManagerImpl.cpp",
-                "com_android_internal_expresslog_Utils.cpp",
                 "com_android_internal_net_NetworkUtilsInternal.cpp",
                 "com_android_internal_os_ClassLoaderFactory.cpp",
                 "com_android_internal_os_FuseAppLoop.cpp",
@@ -262,6 +261,7 @@
                 "libstatssocket_lazy",
                 "libskia",
                 "libtextclassifier_hash_static",
+                "libexpresslog_jni",
             ],
 
             shared_libs: [
@@ -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/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index b550f28..21bdf09 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -200,7 +200,7 @@
 extern int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env);
 extern int register_com_android_internal_content_om_OverlayConfig(JNIEnv *env);
 extern int register_com_android_internal_content_om_OverlayManagerImpl(JNIEnv* env);
-extern int register_com_android_internal_expresslog_Utils(JNIEnv* env);
+extern int register_com_android_modules_expresslog_Utils(JNIEnv* env);
 extern int register_com_android_internal_net_NetworkUtilsInternal(JNIEnv* env);
 extern int register_com_android_internal_os_ClassLoaderFactory(JNIEnv* env);
 extern int register_com_android_internal_os_FuseAppLoop(JNIEnv* env);
@@ -1586,7 +1586,7 @@
         REG_JNI(register_android_os_incremental_IncrementalManager),
         REG_JNI(register_com_android_internal_content_om_OverlayConfig),
         REG_JNI(register_com_android_internal_content_om_OverlayManagerImpl),
-        REG_JNI(register_com_android_internal_expresslog_Utils),
+        REG_JNI(register_com_android_modules_expresslog_Utils),
         REG_JNI(register_com_android_internal_net_NetworkUtilsInternal),
         REG_JNI(register_com_android_internal_os_ClassLoaderFactory),
         REG_JNI(register_com_android_internal_os_LongArrayMultiStateCounter),
diff --git a/core/jni/OWNERS b/core/jni/OWNERS
index bce53328..4e4abec 100644
--- a/core/jni/OWNERS
+++ b/core/jni/OWNERS
@@ -104,6 +104,3 @@
 
 # PM
 per-file com_android_internal_content_* = file:/PACKAGE_MANAGER_OWNERS
-
-# Stats/expresslog
-per-file *expresslog* = file:/services/core/java/com/android/server/stats/OWNERS
diff --git a/core/jni/android_graphics_BLASTBufferQueue.cpp b/core/jni/android_graphics_BLASTBufferQueue.cpp
index 0381510..4474d4ca 100644
--- a/core/jni/android_graphics_BLASTBufferQueue.cpp
+++ b/core/jni/android_graphics_BLASTBufferQueue.cpp
@@ -52,7 +52,7 @@
     return env;
 }
 
-  struct {
+struct {
     jmethodID onTransactionHang;
 } gTransactionHangCallback;
 
@@ -72,12 +72,14 @@
     }
 
     void onTransactionHang(const std::string& reason) {
-        if (mTransactionHangObject) {
-            JNIEnv* env = getenv(mVm);
-            ScopedLocalRef<jstring> jReason(env, env->NewStringUTF(reason.c_str()));
-            getenv(mVm)->CallVoidMethod(mTransactionHangObject,
-                                        gTransactionHangCallback.onTransactionHang, jReason.get());
+        if (!mTransactionHangObject) {
+            return;
         }
+        JNIEnv* env = getenv(mVm);
+        ScopedLocalRef<jstring> jReason(env, env->NewStringUTF(reason.c_str()));
+        getenv(mVm)->CallVoidMethod(mTransactionHangObject,
+                                    gTransactionHangCallback.onTransactionHang, jReason.get());
+        DieIfException(env, "Uncaught exception in TransactionHangCallback.");
     }
 
 private:
@@ -125,26 +127,24 @@
     jobject mObject;
 };
 
-static void nativeSyncNextTransaction(JNIEnv* env, jclass clazz, jlong ptr, jobject callback,
+static bool nativeSyncNextTransaction(JNIEnv* env, jclass clazz, jlong ptr, jobject callback,
                                       jboolean acquireSingleBuffer) {
+    LOG_ALWAYS_FATAL_IF(!callback, "callback passed in to syncNextTransaction must not be NULL");
+
     sp<BLASTBufferQueue> queue = reinterpret_cast<BLASTBufferQueue*>(ptr);
     JavaVM* vm = nullptr;
     LOG_ALWAYS_FATAL_IF(env->GetJavaVM(&vm) != JNI_OK, "Unable to get Java VM");
-    if (!callback) {
-        queue->syncNextTransaction(nullptr, acquireSingleBuffer);
-    } else {
-        auto globalCallbackRef =
-                std::make_shared<JGlobalRefHolder>(vm, env->NewGlobalRef(callback));
-        queue->syncNextTransaction(
-                [globalCallbackRef](SurfaceComposerClient::Transaction* t) {
-                    JNIEnv* env = getenv(globalCallbackRef->vm());
-                    env->CallVoidMethod(globalCallbackRef->object(), gTransactionConsumer.accept,
-                                        env->NewObject(gTransactionClassInfo.clazz,
-                                                       gTransactionClassInfo.ctor,
-                                                       reinterpret_cast<jlong>(t)));
-                },
-                acquireSingleBuffer);
-    }
+
+    auto globalCallbackRef = std::make_shared<JGlobalRefHolder>(vm, env->NewGlobalRef(callback));
+    return queue->syncNextTransaction(
+            [globalCallbackRef](SurfaceComposerClient::Transaction* t) {
+                JNIEnv* env = getenv(globalCallbackRef->vm());
+                env->CallVoidMethod(globalCallbackRef->object(), gTransactionConsumer.accept,
+                                    env->NewObject(gTransactionClassInfo.clazz,
+                                                   gTransactionClassInfo.ctor,
+                                                   reinterpret_cast<jlong>(t)));
+            },
+            acquireSingleBuffer);
 }
 
 static void nativeStopContinuousSyncTransaction(JNIEnv* env, jclass clazz, jlong ptr) {
@@ -152,6 +152,11 @@
     queue->stopContinuousSyncTransaction();
 }
 
+static void nativeClearSyncTransaction(JNIEnv* env, jclass clazz, jlong ptr) {
+    sp<BLASTBufferQueue> queue = reinterpret_cast<BLASTBufferQueue*>(ptr);
+    queue->clearSyncTransaction();
+}
+
 static void nativeUpdate(JNIEnv* env, jclass clazz, jlong ptr, jlong surfaceControl, jlong width,
                          jlong height, jint format) {
     sp<BLASTBufferQueue> queue = reinterpret_cast<BLASTBufferQueue*>(ptr);
@@ -207,8 +212,9 @@
         {"nativeCreate", "(Ljava/lang/String;Z)J", (void*)nativeCreate},
         {"nativeGetSurface", "(JZ)Landroid/view/Surface;", (void*)nativeGetSurface},
         {"nativeDestroy", "(J)V", (void*)nativeDestroy},
-        {"nativeSyncNextTransaction", "(JLjava/util/function/Consumer;Z)V", (void*)nativeSyncNextTransaction},
+        {"nativeSyncNextTransaction", "(JLjava/util/function/Consumer;Z)Z", (void*)nativeSyncNextTransaction},
         {"nativeStopContinuousSyncTransaction", "(J)V", (void*)nativeStopContinuousSyncTransaction},
+        {"nativeClearSyncTransaction", "(J)V", (void*)nativeClearSyncTransaction},
         {"nativeUpdate", "(JJJJI)V", (void*)nativeUpdate},
         {"nativeMergeWithNextTransaction", "(JJJ)V", (void*)nativeMergeWithNextTransaction},
         {"nativeGetLastAcquiredFrameNum", "(J)J", (void*)nativeGetLastAcquiredFrameNum},
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 8ba4eed..e1be0cd 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -2481,36 +2481,31 @@
 
     if (jSurroundFormats == nullptr) {
         ALOGE("jSurroundFormats is NULL");
-        return (jint)AUDIO_JAVA_BAD_VALUE;
+        return static_cast<jint>(AUDIO_JAVA_BAD_VALUE);
     }
     if (!env->IsInstanceOf(jSurroundFormats, gMapClass)) {
         ALOGE("getSurroundFormats not a map");
-        return (jint)AUDIO_JAVA_BAD_VALUE;
+        return static_cast<jint>(AUDIO_JAVA_BAD_VALUE);
     }
 
     jint jStatus;
     unsigned int numSurroundFormats = 0;
-    audio_format_t *surroundFormats = nullptr;
-    bool *surroundFormatsEnabled = nullptr;
-    status_t status = AudioSystem::getSurroundFormats(&numSurroundFormats, surroundFormats,
-                                                      surroundFormatsEnabled);
+    status_t status = AudioSystem::getSurroundFormats(&numSurroundFormats, nullptr, nullptr);
     if (status != NO_ERROR) {
         ALOGE_IF(status != NO_ERROR, "AudioSystem::getSurroundFormats error %d", status);
-        jStatus = nativeToJavaStatus(status);
-        goto exit;
+        return nativeToJavaStatus(status);
     }
     if (numSurroundFormats == 0) {
-        jStatus = (jint)AUDIO_JAVA_SUCCESS;
-        goto exit;
+        return static_cast<jint>(AUDIO_JAVA_SUCCESS);
     }
-    surroundFormats = (audio_format_t *)calloc(numSurroundFormats, sizeof(audio_format_t));
-    surroundFormatsEnabled = (bool *)calloc(numSurroundFormats, sizeof(bool));
-    status = AudioSystem::getSurroundFormats(&numSurroundFormats, surroundFormats,
-                                             surroundFormatsEnabled);
+    auto surroundFormats = std::make_unique<audio_format_t[]>(numSurroundFormats);
+    auto surroundFormatsEnabled = std::make_unique<bool[]>(numSurroundFormats);
+    status = AudioSystem::getSurroundFormats(&numSurroundFormats, &surroundFormats[0],
+                                             &surroundFormatsEnabled[0]);
     jStatus = nativeToJavaStatus(status);
     if (status != NO_ERROR) {
         ALOGE_IF(status != NO_ERROR, "AudioSystem::getSurroundFormats error %d", status);
-        goto exit;
+        return jStatus;
     }
     for (size_t i = 0; i < numSurroundFormats; i++) {
         int audioFormat = audioFormatFromNative(surroundFormats[i]);
@@ -2526,9 +2521,6 @@
         env->DeleteLocalRef(enabled);
     }
 
-exit:
-    free(surroundFormats);
-    free(surroundFormatsEnabled);
     return jStatus;
 }
 
@@ -2538,31 +2530,28 @@
 
     if (jSurroundFormats == nullptr) {
         ALOGE("jSurroundFormats is NULL");
-        return (jint)AUDIO_JAVA_BAD_VALUE;
+        return static_cast<jint>(AUDIO_JAVA_BAD_VALUE);
     }
     if (!env->IsInstanceOf(jSurroundFormats, gArrayListClass)) {
         ALOGE("jSurroundFormats not an arraylist");
-        return (jint)AUDIO_JAVA_BAD_VALUE;
+        return static_cast<jint>(AUDIO_JAVA_BAD_VALUE);
     }
     jint jStatus;
     unsigned int numSurroundFormats = 0;
-    audio_format_t *surroundFormats = nullptr;
-    status_t status = AudioSystem::getReportedSurroundFormats(&numSurroundFormats, surroundFormats);
+    status_t status = AudioSystem::getReportedSurroundFormats(&numSurroundFormats, nullptr);
     if (status != NO_ERROR) {
         ALOGE_IF(status != NO_ERROR, "AudioSystem::getReportedSurroundFormats error %d", status);
-        jStatus = nativeToJavaStatus(status);
-        goto exit;
+        return nativeToJavaStatus(status);
     }
     if (numSurroundFormats == 0) {
-        jStatus = (jint)AUDIO_JAVA_SUCCESS;
-        goto exit;
+        return static_cast<jint>(AUDIO_JAVA_SUCCESS);
     }
-    surroundFormats = (audio_format_t *)calloc(numSurroundFormats, sizeof(audio_format_t));
-    status = AudioSystem::getReportedSurroundFormats(&numSurroundFormats, surroundFormats);
+    auto surroundFormats = std::make_unique<audio_format_t[]>(numSurroundFormats);
+    status = AudioSystem::getReportedSurroundFormats(&numSurroundFormats, &surroundFormats[0]);
     jStatus = nativeToJavaStatus(status);
     if (status != NO_ERROR) {
         ALOGE_IF(status != NO_ERROR, "AudioSystem::getReportedSurroundFormats error %d", status);
-        goto exit;
+        return jStatus;
     }
     for (size_t i = 0; i < numSurroundFormats; i++) {
         int audioFormat = audioFormatFromNative(surroundFormats[i]);
@@ -2576,8 +2565,6 @@
         env->DeleteLocalRef(surroundFormat);
     }
 
-exit:
-    free(surroundFormats);
     return jStatus;
 }
 
diff --git a/core/jni/android_os_GraphicsEnvironment.cpp b/core/jni/android_os_GraphicsEnvironment.cpp
index 78e2d31..d9152d6 100644
--- a/core/jni/android_os_GraphicsEnvironment.cpp
+++ b/core/jni/android_os_GraphicsEnvironment.cpp
@@ -122,6 +122,10 @@
     android::GraphicsEnv::getInstance().hintActivityLaunch();
 }
 
+void nativeToggleAngleAsSystemDriver_native(JNIEnv* env, jobject clazz, jboolean enabled) {
+    android::GraphicsEnv::getInstance().nativeToggleAngleAsSystemDriver(enabled);
+}
+
 const JNINativeMethod g_methods[] = {
         {"isDebuggable", "()Z", reinterpret_cast<void*>(isDebuggable_native)},
         {"setDriverPathAndSphalLibraries", "(Ljava/lang/String;Ljava/lang/String;)V",
@@ -143,6 +147,8 @@
         {"setDebugLayersGLES", "(Ljava/lang/String;)V",
          reinterpret_cast<void*>(setDebugLayersGLES_native)},
         {"hintActivityLaunch", "()V", reinterpret_cast<void*>(hintActivityLaunch_native)},
+        {"nativeToggleAngleAsSystemDriver", "(Z)V",
+         reinterpret_cast<void*>(nativeToggleAngleAsSystemDriver_native)},
 };
 
 const char* const kGraphicsEnvironmentName = "android/os/GraphicsEnvironment";
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_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp
index dd72689..410b441 100644
--- a/core/jni/android_view_DisplayEventReceiver.cpp
+++ b/core/jni/android_view_DisplayEventReceiver.cpp
@@ -48,12 +48,22 @@
 
     struct {
         jclass clazz;
+
         jmethodID init;
+
+        jfieldID vsyncId;
+        jfieldID expectedPresentationTime;
+        jfieldID deadline;
     } frameTimelineClassInfo;
 
     struct {
         jclass clazz;
+
         jmethodID init;
+
+        jfieldID frameInterval;
+        jfieldID preferredFrameTimelineIndex;
+        jfieldID frameTimelines;
     } vsyncEventDataClassInfo;
 
 } gDisplayEventReceiverClassInfo;
@@ -61,7 +71,7 @@
 
 class NativeDisplayEventReceiver : public DisplayEventDispatcher {
 public:
-    NativeDisplayEventReceiver(JNIEnv* env, jobject receiverWeak,
+    NativeDisplayEventReceiver(JNIEnv* env, jobject receiverWeak, jobject vsyncEventDataWeak,
                                const sp<MessageQueue>& messageQueue, jint vsyncSource,
                                jint eventRegistration, jlong layerHandle);
 
@@ -72,6 +82,7 @@
 
 private:
     jobject mReceiverWeakGlobal;
+    jobject mVsyncEventDataWeakGlobal;
     sp<MessageQueue> mMessageQueue;
 
     void dispatchVsync(nsecs_t timestamp, PhysicalDisplayId displayId, uint32_t count,
@@ -85,6 +96,7 @@
 };
 
 NativeDisplayEventReceiver::NativeDisplayEventReceiver(JNIEnv* env, jobject receiverWeak,
+                                                       jobject vsyncEventDataWeak,
                                                        const sp<MessageQueue>& messageQueue,
                                                        jint vsyncSource, jint eventRegistration,
                                                        jlong layerHandle)
@@ -96,6 +108,7 @@
                                                           reinterpret_cast<IBinder*>(layerHandle))
                                                 : nullptr),
         mReceiverWeakGlobal(env->NewGlobalRef(receiverWeak)),
+        mVsyncEventDataWeakGlobal(env->NewGlobalRef(vsyncEventDataWeak)),
         mMessageQueue(messageQueue) {
     ALOGV("receiver %p ~ Initializing display event receiver.", this);
 }
@@ -154,12 +167,43 @@
     JNIEnv* env = AndroidRuntime::getJNIEnv();
 
     ScopedLocalRef<jobject> receiverObj(env, GetReferent(env, mReceiverWeakGlobal));
-    if (receiverObj.get()) {
+    ScopedLocalRef<jobject> vsyncEventDataObj(env, GetReferent(env, mVsyncEventDataWeakGlobal));
+    if (receiverObj.get() && vsyncEventDataObj.get()) {
         ALOGV("receiver %p ~ Invoking vsync handler.", this);
 
-        jobject javaVsyncEventData = createJavaVsyncEventData(env, vsyncEventData);
+        env->SetIntField(vsyncEventDataObj.get(),
+                         gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo
+                                 .preferredFrameTimelineIndex,
+                         vsyncEventData.preferredFrameTimelineIndex);
+        env->SetLongField(vsyncEventDataObj.get(),
+                          gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo.frameInterval,
+                          vsyncEventData.frameInterval);
+
+        ScopedLocalRef<jobjectArray>
+                frameTimelinesObj(env,
+                                  reinterpret_cast<jobjectArray>(
+                                          env->GetObjectField(vsyncEventDataObj.get(),
+                                                              gDisplayEventReceiverClassInfo
+                                                                      .vsyncEventDataClassInfo
+                                                                      .frameTimelines)));
+        for (int i = 0; i < VsyncEventData::kFrameTimelinesLength; i++) {
+            VsyncEventData::FrameTimeline& frameTimeline = vsyncEventData.frameTimelines[i];
+            ScopedLocalRef<jobject>
+                    frameTimelineObj(env, env->GetObjectArrayElement(frameTimelinesObj.get(), i));
+            env->SetLongField(frameTimelineObj.get(),
+                              gDisplayEventReceiverClassInfo.frameTimelineClassInfo.vsyncId,
+                              frameTimeline.vsyncId);
+            env->SetLongField(frameTimelineObj.get(),
+                              gDisplayEventReceiverClassInfo.frameTimelineClassInfo
+                                      .expectedPresentationTime,
+                              frameTimeline.expectedPresentationTime);
+            env->SetLongField(frameTimelineObj.get(),
+                              gDisplayEventReceiverClassInfo.frameTimelineClassInfo.deadline,
+                              frameTimeline.deadlineTimestamp);
+        }
+
         env->CallVoidMethod(receiverObj.get(), gDisplayEventReceiverClassInfo.dispatchVsync,
-                            timestamp, displayId.value, count, javaVsyncEventData);
+                            timestamp, displayId.value, count);
         ALOGV("receiver %p ~ Returned from vsync handler.", this);
     }
 
@@ -227,8 +271,9 @@
     mMessageQueue->raiseAndClearException(env, "dispatchModeChanged");
 }
 
-static jlong nativeInit(JNIEnv* env, jclass clazz, jobject receiverWeak, jobject messageQueueObj,
-                        jint vsyncSource, jint eventRegistration, jlong layerHandle) {
+static jlong nativeInit(JNIEnv* env, jclass clazz, jobject receiverWeak, jobject vsyncEventDataWeak,
+                        jobject messageQueueObj, jint vsyncSource, jint eventRegistration,
+                        jlong layerHandle) {
     sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, messageQueueObj);
     if (messageQueue == NULL) {
         jniThrowRuntimeException(env, "MessageQueue is not initialized.");
@@ -236,8 +281,8 @@
     }
 
     sp<NativeDisplayEventReceiver> receiver =
-            new NativeDisplayEventReceiver(env, receiverWeak, messageQueue, vsyncSource,
-                                           eventRegistration, layerHandle);
+            new NativeDisplayEventReceiver(env, receiverWeak, vsyncEventDataWeak, messageQueue,
+                                           vsyncSource, eventRegistration, layerHandle);
     status_t status = receiver->initialize();
     if (status) {
         String8 message;
@@ -284,7 +329,9 @@
 
 static const JNINativeMethod gMethods[] = {
         /* name, signature, funcPtr */
-        {"nativeInit", "(Ljava/lang/ref/WeakReference;Landroid/os/MessageQueue;IIJ)J",
+        {"nativeInit",
+         "(Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;Landroid/os/"
+         "MessageQueue;IIJ)J",
          (void*)nativeInit},
         {"nativeGetDisplayEventReceiverFinalizer", "()J",
          (void*)nativeGetDisplayEventReceiverFinalizer},
@@ -301,8 +348,7 @@
     gDisplayEventReceiverClassInfo.clazz = MakeGlobalRefOrDie(env, clazz);
 
     gDisplayEventReceiverClassInfo.dispatchVsync =
-            GetMethodIDOrDie(env, gDisplayEventReceiverClassInfo.clazz, "dispatchVsync",
-                             "(JJILandroid/view/DisplayEventReceiver$VsyncEventData;)V");
+            GetMethodIDOrDie(env, gDisplayEventReceiverClassInfo.clazz, "dispatchVsync", "(JJI)V");
     gDisplayEventReceiverClassInfo.dispatchHotplug = GetMethodIDOrDie(env,
             gDisplayEventReceiverClassInfo.clazz, "dispatchHotplug", "(JJZ)V");
     gDisplayEventReceiverClassInfo.dispatchModeChanged =
@@ -328,6 +374,15 @@
     gDisplayEventReceiverClassInfo.frameTimelineClassInfo.init =
             GetMethodIDOrDie(env, gDisplayEventReceiverClassInfo.frameTimelineClassInfo.clazz,
                              "<init>", "(JJJ)V");
+    gDisplayEventReceiverClassInfo.frameTimelineClassInfo.vsyncId =
+            GetFieldIDOrDie(env, gDisplayEventReceiverClassInfo.frameTimelineClassInfo.clazz,
+                            "vsyncId", "J");
+    gDisplayEventReceiverClassInfo.frameTimelineClassInfo.expectedPresentationTime =
+            GetFieldIDOrDie(env, gDisplayEventReceiverClassInfo.frameTimelineClassInfo.clazz,
+                            "expectedPresentationTime", "J");
+    gDisplayEventReceiverClassInfo.frameTimelineClassInfo.deadline =
+            GetFieldIDOrDie(env, gDisplayEventReceiverClassInfo.frameTimelineClassInfo.clazz,
+                            "deadline", "J");
 
     jclass vsyncEventDataClazz =
             FindClassOrDie(env, "android/view/DisplayEventReceiver$VsyncEventData");
@@ -339,6 +394,17 @@
                              "([Landroid/view/"
                              "DisplayEventReceiver$VsyncEventData$FrameTimeline;IJ)V");
 
+    gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo.preferredFrameTimelineIndex =
+            GetFieldIDOrDie(env, gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo.clazz,
+                            "preferredFrameTimelineIndex", "I");
+    gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo.frameInterval =
+            GetFieldIDOrDie(env, gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo.clazz,
+                            "frameInterval", "J");
+    gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo.frameTimelines =
+            GetFieldIDOrDie(env, gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo.clazz,
+                            "frameTimelines",
+                            "[Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;");
+
     return res;
 }
 
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/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index e42c6f1..8e96ac1 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -285,6 +285,7 @@
         JNIEnv* env = getenv();
         env->CallVoidMethod(mTransactionCommittedListenerObject,
                             gTransactionCommittedListenerClassInfo.onTransactionCommitted);
+        DieIfException(env, "Uncaught exception in TransactionCommittedListener.");
     }
 
     static void transactionCallbackThunk(void* context, nsecs_t /*latchTime*/,
@@ -325,6 +326,7 @@
     binder::Status onWindowInfosReported() override {
         JNIEnv* env = getenv();
         env->CallVoidMethod(mListener, gRunnableClassInfo.run);
+        DieIfException(env, "Uncaught exception in WindowInfosReportedListener.");
         return binder::Status::ok();
     }
 
@@ -356,6 +358,7 @@
         env->CallVoidMethod(mTrustedPresentationCallback,
                             gTrustedPresentationCallbackClassInfo.onTrustedPresentationChanged,
                             inTrustedPresentationState);
+        DieIfException(env, "Uncaught exception in TrustedPresentationCallback.");
     }
 
     void addCallbackRef(const sp<SurfaceComposerClient::PresentationCallbackRAII>& callbackRef) {
diff --git a/core/jni/com_android_internal_expresslog_Utils.cpp b/core/jni/com_android_internal_expresslog_Utils.cpp
deleted file mode 100644
index d33a7bd..0000000
--- a/core/jni/com_android_internal_expresslog_Utils.cpp
+++ /dev/null
@@ -1,57 +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.
- */
-
-#include <nativehelper/JNIHelp.h>
-#include <utils/hash/farmhash.h>
-
-#include "core_jni_helpers.h"
-
-// ----------------------------------------------------------------------------
-// JNI Glue
-// ----------------------------------------------------------------------------
-
-static jclass g_stringClass = nullptr;
-
-/**
- * Class:     com_android_internal_expresslog_Utils
- * Method:    hashString
- * Signature: (Ljava/lang/String;)J
- */
-static jlong hashString(JNIEnv* env, jclass /*class*/, jstring metricNameObj) {
-    ScopedUtfChars name(env, metricNameObj);
-    if (name.c_str() == nullptr) {
-        return 0;
-    }
-
-    return static_cast<jlong>(farmhash::Fingerprint64(name.c_str(), name.size()));
-}
-
-static const JNINativeMethod g_methods[] = {
-        {"hashString", "(Ljava/lang/String;)J", (void*)hashString},
-};
-
-static const char* const kUtilsPathName = "com/android/internal/expresslog/Utils";
-
-namespace android {
-
-int register_com_android_internal_expresslog_Utils(JNIEnv* env) {
-    jclass stringClass = FindClassOrDie(env, "java/lang/String");
-    g_stringClass = MakeGlobalRefOrDie(env, stringClass);
-
-    return RegisterMethodsOrDie(env, kUtilsPathName, g_methods, NELEM(g_methods));
-}
-
-} // namespace android
diff --git a/core/jni/core_jni_helpers.h b/core/jni/core_jni_helpers.h
index b85a425..210dc89 100644
--- a/core/jni/core_jni_helpers.h
+++ b/core/jni/core_jni_helpers.h
@@ -134,6 +134,15 @@
     return env;
 }
 
+static inline void DieIfException(JNIEnv* env, const char* message) {
+    if (env->ExceptionCheck()) {
+        jnihelp::ExpandableString summary;
+        jnihelp::ExpandableStringInitialize(&summary);
+        jnihelp::GetStackTraceOrSummary(env, nullptr, &summary);
+        LOG_ALWAYS_FATAL("%s\n%s", message, summary.data);
+    }
+}
+
 }  // namespace android
 
 #endif  // CORE_JNI_HELPERS
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/proto/android/server/windowmanagertransitiontrace.proto b/core/proto/android/server/windowmanagertransitiontrace.proto
index 25985eb..c3cbc91 100644
--- a/core/proto/android/server/windowmanagertransitiontrace.proto
+++ b/core/proto/android/server/windowmanagertransitiontrace.proto
@@ -55,12 +55,14 @@
   optional int64 finish_time_ns = 6; // consider aborted if not provided
   required int32 type = 7;
   repeated Target targets = 8;
+  optional int32 flags = 9;
 }
 
 message Target {
   required int32 mode = 1;
   required int32 layer_id = 2;
   optional int32 window_id = 3;  // Not dumped in always on tracing
+  optional int32 flags = 4;
 }
 
 message TransitionState {
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 78d3923..997a0c9 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"
@@ -1746,37 +1749,6 @@
         android:protectionLevel="dangerous"
         android:permissionFlags="hardRestricted" />
 
-    <!-- @TestApi Allows an application to access wrist temperature data from the watch sensors.
-        <p class="note"><strong>Note: </strong> This permission is for Wear OS only.
-        <p>Protection level: dangerous
-        @hide
-        -->
-    <permission android:name="android.permission.BODY_SENSORS_WRIST_TEMPERATURE"
-                android:permissionGroup="android.permission-group.UNDEFINED"
-                android:label="@string/permlab_bodySensorsWristTemperature"
-                android:description="@string/permdesc_bodySensorsWristTemperature"
-                android:backgroundPermission="android.permission.BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND"
-                android:protectionLevel="dangerous" />
-
-    <!-- @TestApi Allows an application to access wrist temperature data from the watch sensors.
-         If you're requesting this permission, you must also request
-         {@link #BODY_SENSORS_WRIST_TEMPERATURE}. Requesting this permission by itself doesn't
-         give you wrist temperature body sensors access.
-         <p class="note"><strong>Note: </strong> This permission is for Wear OS only.
-         <p>Protection level: dangerous
-
-         <p> This is a hard restricted permission which cannot be held by an app until
-         the installer on record allowlists the permission. For more details see
-         {@link android.content.pm.PackageInstaller.SessionParams#setWhitelistedRestrictedPermissions(Set)}.
-         @hide
-    -->
-    <permission android:name="android.permission.BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND"
-                android:permissionGroup="android.permission-group.UNDEFINED"
-                android:label="@string/permlab_bodySensors_wristTemperature_background"
-                android:description="@string/permdesc_bodySensors_wristTemperature_background"
-                android:protectionLevel="dangerous"
-                android:permissionFlags="hardRestricted" />
-
     <!-- Allows an app to use fingerprint hardware.
          <p>Protection level: normal
          @deprecated Applications should request {@link
@@ -2570,7 +2542,7 @@
     <permission android:name="android.permission.TURN_SCREEN_ON"
         android:label="@string/permlab_turnScreenOn"
         android:description="@string/permdesc_turnScreenOn"
-        android:protectionLevel="normal|appop" />
+        android:protectionLevel="signature|privileged|appop" />
 
     <!-- ==================================================== -->
     <!-- Permissions related to changing audio settings   -->
@@ -2948,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
@@ -7649,6 +7629,13 @@
     <permission android:name="android.permission.LOG_FOREGROUND_RESOURCE_USE"
                 android:protectionLevel="signature|module" />
 
+    <!-- @hide Allows the settings app to access GPU service APIs".
+        <p>Not for use by third-party applications.
+        <p>Protection level: signature
+    -->
+    <permission android:name="android.permission.ACCESS_GPU_SERVICE"
+                android:protectionLevel="signature" />
+
     <!-- @hide Allows an application to get type of any provider uri.
          <p>Not for use by third-party applications.
          <p>Protection level: signature
@@ -8237,6 +8224,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/drawable/loading_spinner.xml b/core/res/res/drawable/loading_spinner.xml
new file mode 100644
index 0000000..49603d8
--- /dev/null
+++ b/core/res/res/drawable/loading_spinner.xml
@@ -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.
+-->
+<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
+                 xmlns:aapt="http://schemas.android.com/aapt">
+    <aapt:attr name="android:drawable">
+        <vector android:height="230dp" android:width="230dp" android:viewportHeight="230"
+                android:viewportWidth="230">
+            <group android:name="_R_G">
+                <group android:name="_R_G_L_0_G" android:translateX="100.621"
+                       android:translateY="102.621">
+                    <path android:name="_R_G_L_0_G_D_0_P_0" android:strokeColor="#ffffff"
+                          android:strokeLineCap="round" android:strokeLineJoin="round"
+                          android:strokeWidth="8" android:strokeAlpha="1" android:trimPathStart="0"
+                          android:trimPathEnd="0" android:trimPathOffset="0"
+                          android:pathData=" M14.38 -93.62 C72.88,-93.62 120.38,-46.12 120.38,12.38 C120.38,70.88 72.88,118.38 14.38,118.38 C-44.12,118.38 -91.62,70.88 -91.62,12.38 C-91.62,-46.12 -44.12,-93.62 14.38,-93.62c "/>
+                </group>
+            </group>
+            <group android:name="time_group"/>
+        </vector>
+    </aapt:attr>
+    <target android:name="_R_G_L_0_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator android:propertyName="trimPathEnd" android:duration="350"
+                                android:startOffset="0" android:valueFrom="0" android:valueTo="1"
+                                android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.4,1 1.0,1.0"/>
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="time_group">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator android:propertyName="translateX" android:duration="517"
+                                android:startOffset="0" android:valueFrom="0" android:valueTo="1"
+                                android:valueType="floatType"/>
+            </set>
+        </aapt:attr>
+    </target>
+</animated-vector>
\ No newline at end of file
diff --git a/core/res/res/layout/user_switching_dialog.xml b/core/res/res/layout/user_switching_dialog.xml
index 2e041f5..496179a 100644
--- a/core/res/res/layout/user_switching_dialog.xml
+++ b/core/res/res/layout/user_switching_dialog.xml
@@ -14,17 +14,48 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+             android:id="@+id/content"
+             android:background="?attr/colorBackground"
+             android:layout_width="match_parent"
+             android:layout_height="match_parent">
 
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/message"
-        style="?attr/textAppearanceListItem"
-        android:background="?attr/colorSurface"
+    <LinearLayout
         android:layout_width="wrap_content"
-        android:layout_height="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
         android:gravity="center"
-        android:drawablePadding="12dp"
-        android:drawableTint="?attr/textColorPrimary"
-        android:paddingStart="?attr/dialogPreferredPadding"
-        android:paddingEnd="?attr/dialogPreferredPadding"
-        android:paddingTop="24dp"
-        android:paddingBottom="24dp" />
+        android:orientation="vertical"
+        android:paddingBottom="77dp">
+
+        <RelativeLayout
+            android:layout_width="242dp"
+            android:layout_height="242dp"
+            android:layout_gravity="center">
+
+            <ImageView
+                android:id="@+id/icon"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_margin="26dp" />
+
+            <ImageView
+                android:id="@+id/progress_circular"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_margin="6dp"
+                android:src="@drawable/loading_spinner" />
+
+        </RelativeLayout>
+
+        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+                  android:id="@+id/message"
+                  style="?attr/textAppearanceListItem"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:textSize="20sp"
+                  android:textAlignment="center"
+                  android:drawableTint="?attr/textColorPrimary" />
+
+    </LinearLayout>
+</FrameLayout>
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>" ĐČĐŸ „ĐŸĐŸŃŃ‚Đ°ĐČĐșĐž &gt; ПроĐČĐ°Ń‚ĐœĐŸŃŃ‚“"</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.xml b/core/res/res/values/config.xml
index e4d74b5..c5f7ea6 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -534,8 +534,10 @@
     <!-- If this is true, long press on power button will be available from the non-interactive state -->
     <bool name="config_supportLongPressPowerWhenNonInteractive">false</bool>
 
-    <!-- If this is true, then keep dreaming when undocking. -->
-    <bool name="config_keepDreamingWhenUndocking">false</bool>
+    <!-- If this is true, then keep dreaming when unplugging.
+         This config was formerly known as config_keepDreamingWhenUndocking.
+         It has been updated to affect other plug types. -->
+    <bool name="config_keepDreamingWhenUnplugging">false</bool>
 
     <!-- The timeout (in ms) to wait before attempting to reconnect to the dream overlay service if
          it becomes disconnected -->
@@ -1373,6 +1375,9 @@
     <!-- Number of notifications to keep in the notification service historical archive -->
     <integer name="config_notificationServiceArchiveSize">100</integer>
 
+    <!-- List of packages that will be able to use full screen intent in notifications by default -->
+    <string-array name="config_useFullScreenIntentPackages" translatable="false" />
+
     <!-- Allow the menu hard key to be disabled in LockScreen on some devices -->
     <bool name="config_disableMenuKeyInLockScreen">false</bool>
 
@@ -1912,7 +1917,8 @@
     <string name="config_defaultNetworkRecommendationProviderPackage" translatable="false"></string>
 
     <!-- The package name of the default search selector app. Must be granted the POST_NOTIFICATIONS
-         permission.
+         permission, and notifications from this app must be given the notification flag
+         FLAG_NO_DISMISS if the notification requests FLAG_ONGOING_EVENT.
     -->
     <string name="config_defaultSearchSelectorPackageName" translatable="false"></string>
 
@@ -4301,8 +4307,12 @@
          This package must be trusted, as it has the permissions to control other applications
          on the device.
          Example: "com.android.wellbeing"
+
+         Note: This config is deprecated, please use config_systemWellbeing instead.
      -->
-    <string name="config_defaultWellbeingPackage" translatable="false"></string>
+    <string name="config_defaultWellbeingPackage" translatable="false">
+        @string/config_systemWellbeing
+    </string>
 
     <!-- The component name for the default system attention service.
          This service must be trusted, as it can be activated without explicit consent of the user.
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 8231407..c6462f1 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1347,16 +1347,6 @@
     <!-- Description of the background body sensors permission, listed so the user can decide whether to allow the application to access data from body sensors in the background. [CHAR LIMIT=NONE] -->
     <string name="permdesc_bodySensors_background" product="default">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>
 
-    <!-- Title of the body sensors wrist temperature permission, listed so the user can decide whether to allow the application to access body sensor wrist temperature data. [CHAR LIMIT=NONE] -->
-    <string name="permlab_bodySensorsWristTemperature">Access body sensor wrist temperature data while the app is in use.</string>
-    <!-- Description of the body sensors wrist temperature permission, listed so the user can decide whether to allow the application to access data from body sensors. [CHAR LIMIT=NONE] -->
-    <string name="permdesc_bodySensorsWristTemperature" product="default">Allows the app to access body sensor wrist temperature data, while the app is in use.</string>
-
-    <!-- Title of the body sensors wrist temperature permission, listed so the user can decide whether to allow the application to access body sensor wrist temperature data. [CHAR LIMIT=NONE] -->
-    <string name="permlab_bodySensors_wristTemperature_background">Access body sensor wrist temperature data while the app is in the background.</string>
-    <!-- Description of the body sensors wrist temperature permission, listed so the user can decide whether to allow the application to access data from body sensors. [CHAR LIMIT=NONE] -->
-    <string name="permdesc_bodySensors_wristTemperature_background" product="default">Allows the app to access body sensor wrist temperature data, while the app is in the background.</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_readCalendar">Read calendar events and details</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -1462,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>
@@ -1980,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] -->
@@ -5906,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>
@@ -5917,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 c6c1c8f..b7df6a4 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1944,7 +1944,7 @@
   <java-symbol type="bool" name="config_allowTheaterModeWakeFromLidSwitch" />
   <java-symbol type="bool" name="config_allowTheaterModeWakeFromDock" />
   <java-symbol type="bool" name="config_allowTheaterModeWakeFromWindowLayout" />
-  <java-symbol type="bool" name="config_keepDreamingWhenUndocking" />
+  <java-symbol type="bool" name="config_keepDreamingWhenUnplugging" />
   <java-symbol type="integer" name="config_keyguardDrawnTimeout" />
   <java-symbol type="bool" name="config_goToSleepOnButtonPressTheaterMode" />
   <java-symbol type="bool" name="config_supportLongPressPowerWhenNonInteractive" />
@@ -2017,6 +2017,7 @@
   <java-symbol type="integer" name="config_notificationsBatteryMediumARGB" />
   <java-symbol type="integer" name="config_notificationsBatteryNearlyFullLevel" />
   <java-symbol type="integer" name="config_notificationServiceArchiveSize" />
+  <java-symbol type="array" name="config_useFullScreenIntentPackages" />
   <java-symbol type="integer" name="config_previousVibrationsDumpLimit" />
   <java-symbol type="integer" name="config_defaultVibrationAmplitude" />
   <java-symbol type="dimen" name="config_hapticChannelMaxVibrationAmplitude" />
@@ -3140,7 +3141,6 @@
   <java-symbol type="style" name="AlertDialogWithEmergencyButton"/>
   <java-symbol type="string" name="work_mode_emergency_call_button" />
   <java-symbol type="string" name="work_mode_off_title" />
-  <java-symbol type="string" name="work_mode_off_message" />
   <java-symbol type="string" name="work_mode_turn_on" />
 
   <java-symbol type="string" name="deprecated_target_sdk_message" />
@@ -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 e59b259..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
@@ -1665,47 +1680,48 @@
 
         <item name="materialColorOnSecondaryFixedVariant">@color/system_on_secondary_fixed_variant</item>
         <item name="materialColorOnTertiaryFixedVariant">@color/system_on_tertiary_fixed_variant</item>
-        <item name="materialColorSurfaceContainerLowest">@color/system_surface_container_lowest_dark</item>
+        <item name="materialColorSurfaceContainerLowest">@color/system_surface_container_lowest_light</item>
         <item name="materialColorOnPrimaryFixedVariant">@color/system_on_primary_fixed_variant</item>
-        <item name="materialColorOnSecondaryContainer">@color/system_on_secondary_container_dark</item>
-        <item name="materialColorOnTertiaryContainer">@color/system_on_tertiary_container_dark</item>
-        <item name="materialColorSurfaceContainerLow">@color/system_surface_container_low_dark</item>
-        <item name="materialColorOnPrimaryContainer">@color/system_on_primary_container_dark</item>
+        <item name="materialColorOnSecondaryContainer">@color/system_on_secondary_container_light</item>
+        <item name="materialColorOnTertiaryContainer">@color/system_on_tertiary_container_light</item>
+        <item name="materialColorSurfaceContainerLow">@color/system_surface_container_low_light</item>
+        <item name="materialColorOnPrimaryContainer">@color/system_on_primary_container_light</item>
         <item name="materialColorSecondaryFixedDim">@color/system_secondary_fixed_dim</item>
-        <item name="materialColorOnErrorContainer">@color/system_on_error_container_dark</item>
+        <item name="materialColorOnErrorContainer">@color/system_on_error_container_light</item>
         <item name="materialColorOnSecondaryFixed">@color/system_on_secondary_fixed</item>
-        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_light</item>
+        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_dark</item>
         <item name="materialColorTertiaryFixedDim">@color/system_tertiary_fixed_dim</item>
         <item name="materialColorOnTertiaryFixed">@color/system_on_tertiary_fixed</item>
         <item name="materialColorPrimaryFixedDim">@color/system_primary_fixed_dim</item>
-        <item name="materialColorSecondaryContainer">@color/system_secondary_container_dark</item>
-        <item name="materialColorErrorContainer">@color/system_error_container_dark</item>
+        <item name="materialColorSecondaryContainer">@color/system_secondary_container_light</item>
+        <item name="materialColorErrorContainer">@color/system_error_container_light</item>
         <item name="materialColorOnPrimaryFixed">@color/system_on_primary_fixed</item>
-        <item name="materialColorPrimaryInverse">@color/system_primary_light</item>
+        <item name="materialColorPrimaryInverse">@color/system_primary_dark</item>
         <item name="materialColorSecondaryFixed">@color/system_secondary_fixed</item>
-        <item name="materialColorSurfaceInverse">@color/system_surface_light</item>
-        <item name="materialColorSurfaceVariant">@color/system_surface_variant_dark</item>
-        <item name="materialColorTertiaryContainer">@color/system_tertiary_container_dark</item>
+        <item name="materialColorSurfaceInverse">@color/system_surface_dark</item>
+        <item name="materialColorSurfaceVariant">@color/system_surface_variant_light</item>
+        <item name="materialColorTertiaryContainer">@color/system_tertiary_container_light</item>
         <item name="materialColorTertiaryFixed">@color/system_tertiary_fixed</item>
-        <item name="materialColorPrimaryContainer">@color/system_primary_container_dark</item>
-        <item name="materialColorOnBackground">@color/system_on_background_dark</item>
+        <item name="materialColorPrimaryContainer">@color/system_primary_container_light</item>
+        <item name="materialColorOnBackground">@color/system_on_background_light</item>
         <item name="materialColorPrimaryFixed">@color/system_primary_fixed</item>
-        <item name="materialColorOnSecondary">@color/system_on_secondary_dark</item>
-        <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>
-        <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
-        <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="materialColorOnSecondary">@color/system_on_secondary_light</item>
+        <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="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="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>
+        <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
+        <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
@@ -1758,47 +1774,48 @@
 
         <item name="materialColorOnSecondaryFixedVariant">@color/system_on_secondary_fixed_variant</item>
         <item name="materialColorOnTertiaryFixedVariant">@color/system_on_tertiary_fixed_variant</item>
-        <item name="materialColorSurfaceContainerLowest">@color/system_surface_container_lowest_dark</item>
+        <item name="materialColorSurfaceContainerLowest">@color/system_surface_container_lowest_light</item>
         <item name="materialColorOnPrimaryFixedVariant">@color/system_on_primary_fixed_variant</item>
-        <item name="materialColorOnSecondaryContainer">@color/system_on_secondary_container_dark</item>
-        <item name="materialColorOnTertiaryContainer">@color/system_on_tertiary_container_dark</item>
-        <item name="materialColorSurfaceContainerLow">@color/system_surface_container_low_dark</item>
-        <item name="materialColorOnPrimaryContainer">@color/system_on_primary_container_dark</item>
+        <item name="materialColorOnSecondaryContainer">@color/system_on_secondary_container_light</item>
+        <item name="materialColorOnTertiaryContainer">@color/system_on_tertiary_container_light</item>
+        <item name="materialColorSurfaceContainerLow">@color/system_surface_container_low_light</item>
+        <item name="materialColorOnPrimaryContainer">@color/system_on_primary_container_light</item>
         <item name="materialColorSecondaryFixedDim">@color/system_secondary_fixed_dim</item>
-        <item name="materialColorOnErrorContainer">@color/system_on_error_container_dark</item>
+        <item name="materialColorOnErrorContainer">@color/system_on_error_container_light</item>
         <item name="materialColorOnSecondaryFixed">@color/system_on_secondary_fixed</item>
-        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_light</item>
+        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_dark</item>
         <item name="materialColorTertiaryFixedDim">@color/system_tertiary_fixed_dim</item>
         <item name="materialColorOnTertiaryFixed">@color/system_on_tertiary_fixed</item>
         <item name="materialColorPrimaryFixedDim">@color/system_primary_fixed_dim</item>
-        <item name="materialColorSecondaryContainer">@color/system_secondary_container_dark</item>
-        <item name="materialColorErrorContainer">@color/system_error_container_dark</item>
+        <item name="materialColorSecondaryContainer">@color/system_secondary_container_light</item>
+        <item name="materialColorErrorContainer">@color/system_error_container_light</item>
         <item name="materialColorOnPrimaryFixed">@color/system_on_primary_fixed</item>
-        <item name="materialColorPrimaryInverse">@color/system_primary_light</item>
+        <item name="materialColorPrimaryInverse">@color/system_primary_dark</item>
         <item name="materialColorSecondaryFixed">@color/system_secondary_fixed</item>
-        <item name="materialColorSurfaceInverse">@color/system_surface_light</item>
-        <item name="materialColorSurfaceVariant">@color/system_surface_variant_dark</item>
-        <item name="materialColorTertiaryContainer">@color/system_tertiary_container_dark</item>
+        <item name="materialColorSurfaceInverse">@color/system_surface_dark</item>
+        <item name="materialColorSurfaceVariant">@color/system_surface_variant_light</item>
+        <item name="materialColorTertiaryContainer">@color/system_tertiary_container_light</item>
         <item name="materialColorTertiaryFixed">@color/system_tertiary_fixed</item>
-        <item name="materialColorPrimaryContainer">@color/system_primary_container_dark</item>
-        <item name="materialColorOnBackground">@color/system_on_background_dark</item>
+        <item name="materialColorPrimaryContainer">@color/system_primary_container_light</item>
+        <item name="materialColorOnBackground">@color/system_on_background_light</item>
         <item name="materialColorPrimaryFixed">@color/system_primary_fixed</item>
-        <item name="materialColorOnSecondary">@color/system_on_secondary_dark</item>
-        <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>
-        <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
-        <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="materialColorOnSecondary">@color/system_on_secondary_light</item>
+        <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="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="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>
+        <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
+        <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.  -->
@@ -4043,16 +4082,16 @@
         <item name="materialColorSecondaryFixedDim">@color/system_secondary_fixed_dim</item>
         <item name="materialColorOnErrorContainer">@color/system_on_error_container_light</item>
         <item name="materialColorOnSecondaryFixed">@color/system_on_secondary_fixed</item>
-        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_light</item>
+        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_dark</item>
         <item name="materialColorTertiaryFixedDim">@color/system_tertiary_fixed_dim</item>
         <item name="materialColorOnTertiaryFixed">@color/system_on_tertiary_fixed</item>
         <item name="materialColorPrimaryFixedDim">@color/system_primary_fixed_dim</item>
         <item name="materialColorSecondaryContainer">@color/system_secondary_container_light</item>
         <item name="materialColorErrorContainer">@color/system_error_container_light</item>
         <item name="materialColorOnPrimaryFixed">@color/system_on_primary_fixed</item>
-        <item name="materialColorPrimaryInverse">@color/system_primary_light</item>
+        <item name="materialColorPrimaryInverse">@color/system_primary_dark</item>
         <item name="materialColorSecondaryFixed">@color/system_secondary_fixed</item>
-        <item name="materialColorSurfaceInverse">@color/system_surface_light</item>
+        <item name="materialColorSurfaceInverse">@color/system_surface_dark</item>
         <item name="materialColorSurfaceVariant">@color/system_surface_variant_light</item>
         <item name="materialColorTertiaryContainer">@color/system_tertiary_container_light</item>
         <item name="materialColorTertiaryFixed">@color/system_tertiary_fixed</item>
@@ -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">
@@ -4123,16 +4162,16 @@
         <item name="materialColorSecondaryFixedDim">@color/system_secondary_fixed_dim</item>
         <item name="materialColorOnErrorContainer">@color/system_on_error_container_light</item>
         <item name="materialColorOnSecondaryFixed">@color/system_on_secondary_fixed</item>
-        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_light</item>
+        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_dark</item>
         <item name="materialColorTertiaryFixedDim">@color/system_tertiary_fixed_dim</item>
         <item name="materialColorOnTertiaryFixed">@color/system_on_tertiary_fixed</item>
         <item name="materialColorPrimaryFixedDim">@color/system_primary_fixed_dim</item>
         <item name="materialColorSecondaryContainer">@color/system_secondary_container_light</item>
         <item name="materialColorErrorContainer">@color/system_error_container_light</item>
         <item name="materialColorOnPrimaryFixed">@color/system_on_primary_fixed</item>
-        <item name="materialColorPrimaryInverse">@color/system_primary_light</item>
+        <item name="materialColorPrimaryInverse">@color/system_primary_dark</item>
         <item name="materialColorSecondaryFixed">@color/system_secondary_fixed</item>
-        <item name="materialColorSurfaceInverse">@color/system_surface_light</item>
+        <item name="materialColorSurfaceInverse">@color/system_surface_dark</item>
         <item name="materialColorSurfaceVariant">@color/system_surface_variant_light</item>
         <item name="materialColorTertiaryContainer">@color/system_tertiary_container_light</item>
         <item name="materialColorTertiaryFixed">@color/system_tertiary_fixed</item>
@@ -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">
@@ -4195,16 +4234,16 @@
         <item name="materialColorSecondaryFixedDim">@color/system_secondary_fixed_dim</item>
         <item name="materialColorOnErrorContainer">@color/system_on_error_container_light</item>
         <item name="materialColorOnSecondaryFixed">@color/system_on_secondary_fixed</item>
-        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_light</item>
+        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_dark</item>
         <item name="materialColorTertiaryFixedDim">@color/system_tertiary_fixed_dim</item>
         <item name="materialColorOnTertiaryFixed">@color/system_on_tertiary_fixed</item>
         <item name="materialColorPrimaryFixedDim">@color/system_primary_fixed_dim</item>
         <item name="materialColorSecondaryContainer">@color/system_secondary_container_light</item>
         <item name="materialColorErrorContainer">@color/system_error_container_light</item>
         <item name="materialColorOnPrimaryFixed">@color/system_on_primary_fixed</item>
-        <item name="materialColorPrimaryInverse">@color/system_primary_light</item>
+        <item name="materialColorPrimaryInverse">@color/system_primary_dark</item>
         <item name="materialColorSecondaryFixed">@color/system_secondary_fixed</item>
-        <item name="materialColorSurfaceInverse">@color/system_surface_light</item>
+        <item name="materialColorSurfaceInverse">@color/system_surface_dark</item>
         <item name="materialColorSurfaceVariant">@color/system_surface_variant_light</item>
         <item name="materialColorTertiaryContainer">@color/system_tertiary_container_light</item>
         <item name="materialColorTertiaryFixed">@color/system_tertiary_fixed</item>
@@ -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">
@@ -4366,16 +4406,16 @@
         <item name="materialColorSecondaryFixedDim">@color/system_secondary_fixed_dim</item>
         <item name="materialColorOnErrorContainer">@color/system_on_error_container_light</item>
         <item name="materialColorOnSecondaryFixed">@color/system_on_secondary_fixed</item>
-        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_light</item>
+        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_dark</item>
         <item name="materialColorTertiaryFixedDim">@color/system_tertiary_fixed_dim</item>
         <item name="materialColorOnTertiaryFixed">@color/system_on_tertiary_fixed</item>
         <item name="materialColorPrimaryFixedDim">@color/system_primary_fixed_dim</item>
         <item name="materialColorSecondaryContainer">@color/system_secondary_container_light</item>
         <item name="materialColorErrorContainer">@color/system_error_container_light</item>
         <item name="materialColorOnPrimaryFixed">@color/system_on_primary_fixed</item>
-        <item name="materialColorPrimaryInverse">@color/system_primary_light</item>
+        <item name="materialColorPrimaryInverse">@color/system_primary_dark</item>
         <item name="materialColorSecondaryFixed">@color/system_secondary_fixed</item>
-        <item name="materialColorSurfaceInverse">@color/system_surface_light</item>
+        <item name="materialColorSurfaceInverse">@color/system_surface_dark</item>
         <item name="materialColorSurfaceVariant">@color/system_surface_variant_light</item>
         <item name="materialColorTertiaryContainer">@color/system_tertiary_container_light</item>
         <item name="materialColorTertiaryFixed">@color/system_tertiary_fixed</item>
@@ -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">
@@ -4475,47 +4515,48 @@
 
         <item name="materialColorOnSecondaryFixedVariant">@color/system_on_secondary_fixed_variant</item>
         <item name="materialColorOnTertiaryFixedVariant">@color/system_on_tertiary_fixed_variant</item>
-        <item name="materialColorSurfaceContainerLowest">@color/system_surface_container_lowest_dark</item>
+        <item name="materialColorSurfaceContainerLowest">@color/system_surface_container_lowest_light</item>
         <item name="materialColorOnPrimaryFixedVariant">@color/system_on_primary_fixed_variant</item>
-        <item name="materialColorOnSecondaryContainer">@color/system_on_secondary_container_dark</item>
-        <item name="materialColorOnTertiaryContainer">@color/system_on_tertiary_container_dark</item>
-        <item name="materialColorSurfaceContainerLow">@color/system_surface_container_low_dark</item>
-        <item name="materialColorOnPrimaryContainer">@color/system_on_primary_container_dark</item>
+        <item name="materialColorOnSecondaryContainer">@color/system_on_secondary_container_light</item>
+        <item name="materialColorOnTertiaryContainer">@color/system_on_tertiary_container_light</item>
+        <item name="materialColorSurfaceContainerLow">@color/system_surface_container_low_light</item>
+        <item name="materialColorOnPrimaryContainer">@color/system_on_primary_container_light</item>
         <item name="materialColorSecondaryFixedDim">@color/system_secondary_fixed_dim</item>
-        <item name="materialColorOnErrorContainer">@color/system_on_error_container_dark</item>
+        <item name="materialColorOnErrorContainer">@color/system_on_error_container_light</item>
         <item name="materialColorOnSecondaryFixed">@color/system_on_secondary_fixed</item>
-        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_light</item>
+        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_dark</item>
         <item name="materialColorTertiaryFixedDim">@color/system_tertiary_fixed_dim</item>
         <item name="materialColorOnTertiaryFixed">@color/system_on_tertiary_fixed</item>
         <item name="materialColorPrimaryFixedDim">@color/system_primary_fixed_dim</item>
-        <item name="materialColorSecondaryContainer">@color/system_secondary_container_dark</item>
-        <item name="materialColorErrorContainer">@color/system_error_container_dark</item>
+        <item name="materialColorSecondaryContainer">@color/system_secondary_container_light</item>
+        <item name="materialColorErrorContainer">@color/system_error_container_light</item>
         <item name="materialColorOnPrimaryFixed">@color/system_on_primary_fixed</item>
-        <item name="materialColorPrimaryInverse">@color/system_primary_light</item>
+        <item name="materialColorPrimaryInverse">@color/system_primary_dark</item>
         <item name="materialColorSecondaryFixed">@color/system_secondary_fixed</item>
-        <item name="materialColorSurfaceInverse">@color/system_surface_light</item>
-        <item name="materialColorSurfaceVariant">@color/system_surface_variant_dark</item>
-        <item name="materialColorTertiaryContainer">@color/system_tertiary_container_dark</item>
+        <item name="materialColorSurfaceInverse">@color/system_surface_dark</item>
+        <item name="materialColorSurfaceVariant">@color/system_surface_variant_light</item>
+        <item name="materialColorTertiaryContainer">@color/system_tertiary_container_light</item>
         <item name="materialColorTertiaryFixed">@color/system_tertiary_fixed</item>
-        <item name="materialColorPrimaryContainer">@color/system_primary_container_dark</item>
-        <item name="materialColorOnBackground">@color/system_on_background_dark</item>
+        <item name="materialColorPrimaryContainer">@color/system_primary_container_light</item>
+        <item name="materialColorOnBackground">@color/system_on_background_light</item>
         <item name="materialColorPrimaryFixed">@color/system_primary_fixed</item>
-        <item name="materialColorOnSecondary">@color/system_on_secondary_dark</item>
-        <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>
-        <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
-        <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="materialColorOnSecondary">@color/system_on_secondary_light</item>
+        <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="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="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>
+        <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
+        <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">
@@ -4570,47 +4611,48 @@
 
         <item name="materialColorOnSecondaryFixedVariant">@color/system_on_secondary_fixed_variant</item>
         <item name="materialColorOnTertiaryFixedVariant">@color/system_on_tertiary_fixed_variant</item>
-        <item name="materialColorSurfaceContainerLowest">@color/system_surface_container_lowest_dark</item>
+        <item name="materialColorSurfaceContainerLowest">@color/system_surface_container_lowest_light</item>
         <item name="materialColorOnPrimaryFixedVariant">@color/system_on_primary_fixed_variant</item>
-        <item name="materialColorOnSecondaryContainer">@color/system_on_secondary_container_dark</item>
-        <item name="materialColorOnTertiaryContainer">@color/system_on_tertiary_container_dark</item>
-        <item name="materialColorSurfaceContainerLow">@color/system_surface_container_low_dark</item>
-        <item name="materialColorOnPrimaryContainer">@color/system_on_primary_container_dark</item>
+        <item name="materialColorOnSecondaryContainer">@color/system_on_secondary_container_light</item>
+        <item name="materialColorOnTertiaryContainer">@color/system_on_tertiary_container_light</item>
+        <item name="materialColorSurfaceContainerLow">@color/system_surface_container_low_light</item>
+        <item name="materialColorOnPrimaryContainer">@color/system_on_primary_container_light</item>
         <item name="materialColorSecondaryFixedDim">@color/system_secondary_fixed_dim</item>
-        <item name="materialColorOnErrorContainer">@color/system_on_error_container_dark</item>
+        <item name="materialColorOnErrorContainer">@color/system_on_error_container_light</item>
         <item name="materialColorOnSecondaryFixed">@color/system_on_secondary_fixed</item>
-        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_light</item>
+        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_dark</item>
         <item name="materialColorTertiaryFixedDim">@color/system_tertiary_fixed_dim</item>
         <item name="materialColorOnTertiaryFixed">@color/system_on_tertiary_fixed</item>
         <item name="materialColorPrimaryFixedDim">@color/system_primary_fixed_dim</item>
-        <item name="materialColorSecondaryContainer">@color/system_secondary_container_dark</item>
-        <item name="materialColorErrorContainer">@color/system_error_container_dark</item>
+        <item name="materialColorSecondaryContainer">@color/system_secondary_container_light</item>
+        <item name="materialColorErrorContainer">@color/system_error_container_light</item>
         <item name="materialColorOnPrimaryFixed">@color/system_on_primary_fixed</item>
-        <item name="materialColorPrimaryInverse">@color/system_primary_light</item>
+        <item name="materialColorPrimaryInverse">@color/system_primary_dark</item>
         <item name="materialColorSecondaryFixed">@color/system_secondary_fixed</item>
-        <item name="materialColorSurfaceInverse">@color/system_surface_light</item>
-        <item name="materialColorSurfaceVariant">@color/system_surface_variant_dark</item>
-        <item name="materialColorTertiaryContainer">@color/system_tertiary_container_dark</item>
+        <item name="materialColorSurfaceInverse">@color/system_surface_dark</item>
+        <item name="materialColorSurfaceVariant">@color/system_surface_variant_light</item>
+        <item name="materialColorTertiaryContainer">@color/system_tertiary_container_light</item>
         <item name="materialColorTertiaryFixed">@color/system_tertiary_fixed</item>
-        <item name="materialColorPrimaryContainer">@color/system_primary_container_dark</item>
-        <item name="materialColorOnBackground">@color/system_on_background_dark</item>
+        <item name="materialColorPrimaryContainer">@color/system_primary_container_light</item>
+        <item name="materialColorOnBackground">@color/system_on_background_light</item>
         <item name="materialColorPrimaryFixed">@color/system_primary_fixed</item>
-        <item name="materialColorOnSecondary">@color/system_on_secondary_dark</item>
-        <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>
-        <item name="materialColorOutlineVariant">@color/system_outline_variant_dark</item>
-        <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="materialColorOnSecondary">@color/system_on_secondary_light</item>
+        <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="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="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>
+        <item name="materialColorOutlineVariant">@color/system_outline_variant_light</item>
+        <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" />
@@ -4700,16 +4742,16 @@
         <item name="materialColorSecondaryFixedDim">@color/system_secondary_fixed_dim</item>
         <item name="materialColorOnErrorContainer">@color/system_on_error_container_dark</item>
         <item name="materialColorOnSecondaryFixed">@color/system_on_secondary_fixed</item>
-        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_dark</item>
+        <item name="materialColorOnSurfaceInverse">@color/system_on_surface_light</item>
         <item name="materialColorTertiaryFixedDim">@color/system_tertiary_fixed_dim</item>
         <item name="materialColorOnTertiaryFixed">@color/system_on_tertiary_fixed</item>
         <item name="materialColorPrimaryFixedDim">@color/system_primary_fixed_dim</item>
         <item name="materialColorSecondaryContainer">@color/system_secondary_container_dark</item>
         <item name="materialColorErrorContainer">@color/system_error_container_dark</item>
         <item name="materialColorOnPrimaryFixed">@color/system_on_primary_fixed</item>
-        <item name="materialColorPrimaryInverse">@color/system_primary_dark</item>
+        <item name="materialColorPrimaryInverse">@color/system_primary_light</item>
         <item name="materialColorSecondaryFixed">@color/system_secondary_fixed</item>
-        <item name="materialColorSurfaceInverse">@color/system_surface_dark</item>
+        <item name="materialColorSurfaceInverse">@color/system_surface_light</item>
         <item name="materialColorSurfaceVariant">@color/system_surface_variant_dark</item>
         <item name="materialColorTertiaryContainer">@color/system_tertiary_container_dark</item>
         <item name="materialColorTertiaryFixed">@color/system_tertiary_fixed</item>
@@ -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/res/res/xml/irq_device_map.xml b/core/res/res/xml/irq_device_map.xml
index 4fae8fb..8b3667e 100644
--- a/core/res/res/xml/irq_device_map.xml
+++ b/core/res/res/xml/irq_device_map.xml
@@ -18,14 +18,16 @@
 -->
 <irq-device-map>
   <!--  This file maps devices (chips) that can send interrupts to the main processor (and bring it
-        out of sleep) to logical subsystems in userspace code. Since each Android device has its own
-        uniquely designed chipset, this mapping is expected to be empty by default and should be
-        overridden by device-specific configs.
+        out of sleep) to logical subsystems in userspace code. Since each Android device can have
+        a differently designed chipset, this mapping is expected to be empty by default and should
+        be overridden by device-specific configs.
         This mapping helps the system to meaningfully attribute CPU wakeups to logical work that
-        happened on the device. The devices are referred to by their names as defined in the kernel.
-        Currently, defined subsystems are:
-        - Alarm: Use this to denote wakeup alarms requested by apps via the AlarmManager API.
-        - Wifi: Use this to denote network traffic that uses the wifi transport.
+        happened on the device and the app activity that caused it. The devices are referred to by
+        their names as defined in the kernel. Currently, defined subsystems are:
+            - Alarm: Use this to denote wakeup alarms requested by apps via the AlarmManager API.
+            - Wifi: Use this to denote network traffic that uses the wifi transport.
+            - Sound_trigger: Use this to denote sound phrase detection, like the ones supported by
+        SoundTriggerManager.
 
         The overlay should use tags <device> and <subsystem> to describe this mapping in the
         following way:
diff --git a/core/tests/coretests/Android.bp b/core/tests/coretests/Android.bp
index 3ea1592..34b4c51 100644
--- a/core/tests/coretests/Android.bp
+++ b/core/tests/coretests/Android.bp
@@ -91,8 +91,8 @@
         ":BstatsTestApp",
         ":BinderDeathRecipientHelperApp1",
         ":BinderDeathRecipientHelperApp2",
+        ":com.android.cts.helpers.aosp",
     ],
-    required: ["com.android.cts.helpers.aosp"],
 }
 
 // Rules to copy all the test apks to the intermediate raw resource directory
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/app/OWNERS b/core/tests/coretests/src/android/app/OWNERS
index b3f3993..8d9461d 100644
--- a/core/tests/coretests/src/android/app/OWNERS
+++ b/core/tests/coretests/src/android/app/OWNERS
@@ -4,3 +4,6 @@
 per-file *Notification* = file:/packages/SystemUI/OWNERS
 per-file *Zen* = file:/packages/SystemUI/OWNERS
 per-file *StatusBar* = file:/packages/SystemUI/OWNERS
+
+# A11Y and related
+per-file *UiAutomation* = file:/services/accessibility/OWNERS
diff --git a/core/tests/coretests/src/android/app/UiAutomationTest.java b/core/tests/coretests/src/android/app/UiAutomationTest.java
new file mode 100644
index 0000000..3ac5057
--- /dev/null
+++ b/core/tests/coretests/src/android/app/UiAutomationTest.java
@@ -0,0 +1,144 @@
+/*
+ * 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.app;
+
+import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.Display.INVALID_DISPLAY;
+
+import static com.google.common.truth.Truth.assertWithMessage;
+
+import static org.junit.Assert.assertThrows;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.Looper;
+import android.os.UserManager;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class UiAutomationTest {
+
+    private static final int SECONDARY_DISPLAY_ID = 42;
+    private static final int DISPLAY_ID_ASSIGNED_TO_USER = 108;
+
+    private final Looper mLooper = Looper.getMainLooper();
+
+    @Mock
+    private Context mContext;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private IUiAutomationConnection mConnection;
+
+    @Before
+    public void setFixtures() {
+        when(mContext.getMainLooper()).thenReturn(mLooper);
+        mockSystemService(UserManager.class, mUserManager);
+
+        // Set default expectations
+        mockVisibleBackgroundUsersSupported(/* supported= */ false);
+        mockUserVisibility(/* visible= */ true);
+        // make sure it's not used, unless explicitly mocked
+        mockDisplayAssignedToUser(INVALID_DISPLAY);
+        mockContextDisplay(DEFAULT_DISPLAY);
+    }
+
+    @Test
+    public void testContextConstructor_nullContext() {
+        assertThrows(IllegalArgumentException.class,
+                () -> new UiAutomation((Context) null, mConnection));
+    }
+
+    @Test
+    public void testContextConstructor_nullConnection() {
+        assertThrows(IllegalArgumentException.class,
+                () -> new UiAutomation(mContext, (IUiAutomationConnection) null));
+    }
+
+    @Test
+    public void testGetDisplay_contextWithSecondaryDisplayId() {
+        mockContextDisplay(SECONDARY_DISPLAY_ID);
+
+        UiAutomation uiAutomation = new UiAutomation(mContext, mConnection);
+
+        // It's always DEFAULT_DISPLAY regardless, unless the device supports visible bg users
+        assertWithMessage("getDisplayId()").that(uiAutomation.getDisplayId())
+                .isEqualTo(DEFAULT_DISPLAY);
+    }
+
+    @Test
+    public void testGetDisplay_contextWithInvalidDisplayId() {
+        mockContextDisplay(INVALID_DISPLAY);
+
+        UiAutomation uiAutomation = new UiAutomation(mContext, mConnection);
+
+        assertWithMessage("getDisplayId()").that(uiAutomation.getDisplayId())
+                .isEqualTo(DEFAULT_DISPLAY);
+    }
+
+    @Test
+    public void testGetDisplay_visibleBgUsers() {
+        mockVisibleBackgroundUsersSupported(/* supported= */ true);
+        mockContextDisplay(SECONDARY_DISPLAY_ID);
+        // Should be using display from context, not from user
+        mockDisplayAssignedToUser(DISPLAY_ID_ASSIGNED_TO_USER);
+
+        UiAutomation uiAutomation = new UiAutomation(mContext, mConnection);
+
+        assertWithMessage("getDisplayId()").that(uiAutomation.getDisplayId())
+                .isEqualTo(SECONDARY_DISPLAY_ID);
+    }
+
+    @Test
+    public void testGetDisplay_visibleBgUsers_contextWithInvalidDisplayId() {
+        mockVisibleBackgroundUsersSupported(/* supported= */ true);
+        mockContextDisplay(INVALID_DISPLAY);
+        mockDisplayAssignedToUser(DISPLAY_ID_ASSIGNED_TO_USER);
+
+        UiAutomation uiAutomation = new UiAutomation(mContext, mConnection);
+
+        assertWithMessage("getDisplayId()").that(uiAutomation.getDisplayId())
+                .isEqualTo(DISPLAY_ID_ASSIGNED_TO_USER);
+    }
+
+    private <T> void mockSystemService(Class<T> svcClass, T svc) {
+        String svcName = svcClass.getName();
+        when(mContext.getSystemServiceName(svcClass)).thenReturn(svcName);
+        when(mContext.getSystemService(svcName)).thenReturn(svc);
+    }
+
+    private void mockVisibleBackgroundUsersSupported(boolean supported) {
+        when(mUserManager.isVisibleBackgroundUsersSupported()).thenReturn(supported);
+    }
+
+    private void mockContextDisplay(int displayId) {
+        when(mContext.getDisplayId()).thenReturn(displayId);
+    }
+
+    private void mockDisplayAssignedToUser(int displayId) {
+        when(mUserManager.getMainDisplayIdAssignedToUser()).thenReturn(displayId);
+    }
+
+    private void mockUserVisibility(boolean visible) {
+        when(mUserManager.isUserVisible()).thenReturn(visible);
+    }
+}
diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
index 4f91e7a..fb0f3d4 100644
--- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
@@ -71,6 +71,7 @@
 import com.android.internal.content.ReferrerIntent;
 
 import org.junit.After;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -95,7 +96,8 @@
     // few sequence numbers the framework used to launch the test activity.
     private static final int BASE_SEQ = 10000;
 
-    private final ActivityTestRule<TestActivity> mActivityTestRule =
+    @Rule
+    public final ActivityTestRule<TestActivity> mActivityTestRule =
             new ActivityTestRule<>(TestActivity.class, true /* initialTouchMode */,
                     false /* launchActivity */);
 
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..07dec5d 100644
--- a/core/tests/coretests/src/android/hardware/face/FaceManagerTest.java
+++ b/core/tests/coretests/src/android/hardware/face/FaceManagerTest.java
@@ -17,12 +17,16 @@
 package android.hardware.face;
 
 import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_HW_UNAVAILABLE;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_UNABLE_TO_PROCESS;
 
 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 +42,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 +56,7 @@
 import org.mockito.junit.MockitoRule;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 @Presubmit
@@ -70,6 +77,8 @@
     private IFaceService mService;
     @Mock
     private FaceManager.AuthenticationCallback mAuthCallback;
+    @Mock
+    private FaceManager.EnrollmentCallback mEnrollmentCallback;
 
     @Captor
     private ArgumentCaptor<IFaceAuthenticatorsRegisteredCallback> mCaptor;
@@ -107,9 +116,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 +155,45 @@
 
         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());
+    }
+
+    @Test
+    public void enrollment_errorWhenHardwareAuthTokenIsNull() throws RemoteException {
+        initializeProperties();
+        mFaceManager.enroll(USER_ID, null,
+                new CancellationSignal(), mEnrollmentCallback, null /* disabledFeatures */);
+
+        verify(mEnrollmentCallback).onEnrollmentError(eq(FACE_ERROR_UNABLE_TO_PROCESS),
+                anyString());
+        verify(mService, never()).enroll(eq(USER_ID), any(), any(),
+                any(), anyString(), any(), any(), anyBoolean());
+    }
+
+    private void initializeProperties() throws RemoteException {
+        verify(mService).addAuthenticatorsRegisteredCallback(mCaptor.capture());
+
+        mCaptor.getValue().onAllAuthenticatorsRegistered(mProps);
+    }
 }
diff --git a/core/tests/coretests/src/android/hardware/fingerprint/FingerprintManagerTest.java b/core/tests/coretests/src/android/hardware/fingerprint/FingerprintManagerTest.java
index 5058065..625e2e3 100644
--- a/core/tests/coretests/src/android/hardware/fingerprint/FingerprintManagerTest.java
+++ b/core/tests/coretests/src/android/hardware/fingerprint/FingerprintManagerTest.java
@@ -17,12 +17,14 @@
 package android.hardware.fingerprint;
 
 import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_UNABLE_TO_PROCESS;
 
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
@@ -70,6 +72,8 @@
     private IFingerprintService mService;
     @Mock
     private FingerprintManager.AuthenticationCallback mAuthCallback;
+    @Mock
+    private FingerprintManager.EnrollmentCallback mEnrollCallback;
 
     @Captor
     private ArgumentCaptor<IFingerprintAuthenticatorsRegisteredCallback> mCaptor;
@@ -149,4 +153,17 @@
 
         verify(mAuthCallback).onAuthenticationError(eq(FINGERPRINT_ERROR_HW_UNAVAILABLE), any());
     }
+
+    @Test
+    public void enrollment_errorWhenHardwareAuthTokenIsNull() throws RemoteException {
+        verify(mService).addAuthenticatorsRegisteredCallback(mCaptor.capture());
+
+        mCaptor.getValue().onAllAuthenticatorsRegistered(mProps);
+        mFingerprintManager.enroll(null, new CancellationSignal(), USER_ID,
+                mEnrollCallback, FingerprintManager.ENROLL_ENROLL);
+
+        verify(mEnrollCallback).onEnrollmentError(eq(FINGERPRINT_ERROR_UNABLE_TO_PROCESS),
+                anyString());
+        verify(mService, never()).enroll(any(), any(), anyInt(), any(), anyString(), anyInt());
+    }
 }
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/android/view/stylus/HandwritingInitiatorTest.java b/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java
index 8ae6381..c0125af 100644
--- a/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java
+++ b/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java
@@ -23,14 +23,20 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyFloat;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.mock;
 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;
+import static org.mockito.Mockito.when;
 
 import android.app.Instrumentation;
 import android.content.Context;
+import android.graphics.Canvas;
 import android.graphics.Rect;
 import android.platform.test.annotations.Presubmit;
 import android.view.HandwritingInitiator;
@@ -38,7 +44,9 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewConfiguration;
+import android.view.ViewGroup;
 import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
@@ -47,6 +55,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 
 /**
  * Tests for {@link HandwritingInitiator}
@@ -543,6 +552,111 @@
         assertThat(mHandwritingInitiator.mConnectedView.get()).isEqualTo(mTestView1);
     }
 
+    @Test
+    public void startHandwriting_hidesHint() {
+        EditText editText =
+                new EditText(InstrumentationRegistry.getInstrumentation().getTargetContext());
+        editText.setHint("hint");
+        editText.setLayoutParams(new ViewGroup.LayoutParams(
+                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
+
+        verifyEditTextDrawsText(editText, "hint");
+
+        mHandwritingInitiator.onTouchEvent(createStylusEvent(ACTION_DOWN, 0, 0, 0));
+        mHandwritingInitiator.startHandwriting(editText);
+
+        verifyEditTextDrawsText(editText, null);
+    }
+
+    @Test
+    public void startHandwriting_clearFocus_restoresHint() {
+        EditText editText =
+                new EditText(InstrumentationRegistry.getInstrumentation().getTargetContext());
+        editText.setHint("hint");
+        editText.setLayoutParams(new ViewGroup.LayoutParams(1024, 1024));
+        editText.requestFocus();
+
+        verifyEditTextDrawsText(editText, "hint");
+
+        mHandwritingInitiator.onTouchEvent(createStylusEvent(ACTION_DOWN, 0, 0, 0));
+        mHandwritingInitiator.startHandwriting(editText);
+
+        verifyEditTextDrawsText(editText, null);
+
+        editText.clearFocus();
+
+        verifyEditTextDrawsText(editText, "hint");
+    }
+
+    @Test
+    public void startHandwriting_setHint_restoresHint() {
+        EditText editText =
+                new EditText(InstrumentationRegistry.getInstrumentation().getTargetContext());
+        editText.setHint("hint");
+        editText.setLayoutParams(new ViewGroup.LayoutParams(1024, 1024));
+
+        verifyEditTextDrawsText(editText, "hint");
+
+        mHandwritingInitiator.onTouchEvent(createStylusEvent(ACTION_DOWN, 0, 0, 0));
+        mHandwritingInitiator.startHandwriting(editText);
+
+        verifyEditTextDrawsText(editText, null);
+
+        editText.setHint("new hint");
+
+        verifyEditTextDrawsText(editText, "new hint");
+    }
+
+    @Test
+    public void startHandwriting_setText_restoresHint() {
+        EditText editText =
+                new EditText(InstrumentationRegistry.getInstrumentation().getTargetContext());
+        editText.setHint("hint");
+        editText.setLayoutParams(new ViewGroup.LayoutParams(1024, 1024));
+
+        verifyEditTextDrawsText(editText, "hint");
+
+        mHandwritingInitiator.onTouchEvent(createStylusEvent(ACTION_DOWN, 0, 0, 0));
+        mHandwritingInitiator.startHandwriting(editText);
+
+        verifyEditTextDrawsText(editText, null);
+
+        editText.setText("a");
+        editText.setText("");
+
+        verifyEditTextDrawsText(editText, "hint");
+    }
+
+    private void verifyEditTextDrawsText(EditText editText, String text) {
+        editText.measure(
+                View.MeasureSpec.makeMeasureSpec(1024, View.MeasureSpec.AT_MOST),
+                View.MeasureSpec.makeMeasureSpec(1024, View.MeasureSpec.AT_MOST));
+        Canvas canvas = prepareMockCanvas(editText);
+        editText.draw(canvas);
+        if (text != null) {
+            ArgumentCaptor<CharSequence> textCaptor = ArgumentCaptor.forClass(CharSequence.class);
+            verify(canvas).drawText(
+                    textCaptor.capture(), anyInt(), anyInt(), anyFloat(), anyFloat(), any());
+            assertThat(textCaptor.getValue().toString()).isEqualTo(text);
+        } else {
+            verify(canvas, never()).drawText(
+                    any(CharSequence.class), anyInt(), anyInt(), anyFloat(), anyFloat(), any());
+        }
+    }
+
+    private Canvas prepareMockCanvas(View view) {
+        Canvas canvas = mock(Canvas.class);
+        when(canvas.getClipBounds(any())).thenAnswer(invocation -> {
+            Rect outRect = invocation.getArgument(0);
+            outRect.top = 0;
+            outRect.left = 0;
+            outRect.right = view.getMeasuredWidth();
+            outRect.bottom = view.getMeasuredHeight();
+            return true;
+        });
+        return canvas;
+    }
+
     private MotionEvent createStylusEvent(int action, int x, int y, long eventTime) {
         MotionEvent.PointerProperties[] properties = MotionEvent.PointerProperties.createArray(1);
         properties[0].toolType = MotionEvent.TOOL_TYPE_STYLUS;
diff --git a/core/tests/coretests/src/android/window/WindowOnBackInvokedDispatcherTest.java b/core/tests/coretests/src/android/window/WindowOnBackInvokedDispatcherTest.java
index 3b6e8ea..cde100c 100644
--- a/core/tests/coretests/src/android/window/WindowOnBackInvokedDispatcherTest.java
+++ b/core/tests/coretests/src/android/window/WindowOnBackInvokedDispatcherTest.java
@@ -70,7 +70,13 @@
     private ApplicationInfo mApplicationInfo;
 
     private final BackMotionEvent mBackEvent = new BackMotionEvent(
-            0, 0, 0, BackEvent.EDGE_LEFT, null);
+            /* touchX = */ 0,
+            /* touchY = */ 0,
+            /* progress = */ 0,
+            /* velocityX = */ 0,
+            /* velocityY = */ 0,
+            /* swipeEdge = */ BackEvent.EDGE_LEFT,
+            /* departingAnimationTarget = */ null);
 
     @Before
     public void setUp() throws Exception {
diff --git a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutChooserActivityTest.java
index 03d366e6..57a1376 100644
--- a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutChooserActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutChooserActivityTest.java
@@ -46,6 +46,10 @@
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
 import android.os.Handler;
+import android.support.test.uiautomator.By;
+import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.UiObject2;
+import android.support.test.uiautomator.Until;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.IAccessibilityManager;
 
@@ -57,6 +61,7 @@
 import com.android.internal.R;
 import com.android.internal.accessibility.dialog.AccessibilityShortcutChooserActivity;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -73,8 +78,14 @@
 @RunWith(AndroidJUnit4.class)
 public class AccessibilityShortcutChooserActivityTest {
     private static final String ONE_HANDED_MODE = "One-Handed mode";
+    private static final String DENY_LABEL = "Deny";
+    private static final String EDIT_LABEL = "Edit shortcuts";
+    private static final String LIST_TITLE_LABEL = "Choose features to use";
     private static final String TEST_LABEL = "TEST_LABEL";
     private static final ComponentName TEST_COMPONENT_NAME = new ComponentName("package", "class");
+    private static final long UI_TIMEOUT_MS = 1000;
+    private UiDevice mDevice;
+    private ActivityScenario<TestAccessibilityShortcutChooserActivity> mScenario;
     private TestAccessibilityShortcutChooserActivity mActivity;
 
     @Rule
@@ -92,6 +103,8 @@
 
     @Before
     public void setUp() throws Exception {
+        mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
+        mDevice.wakeUp();
         when(mAccessibilityServiceInfo.getResolveInfo()).thenReturn(mResolveInfo);
         mResolveInfo.serviceInfo = mServiceInfo;
         mServiceInfo.applicationInfo = mApplicationInfo;
@@ -102,27 +115,36 @@
         when(mAccessibilityManagerService.isAccessibilityTargetAllowed(
                 anyString(), anyInt(), anyInt())).thenReturn(true);
         TestAccessibilityShortcutChooserActivity.setupForTesting(mAccessibilityManagerService);
+        mScenario = ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class);
+        mScenario.onActivity(activity -> mActivity = activity);
+        mScenario.moveToState(Lifecycle.State.CREATED);
+        mScenario.moveToState(Lifecycle.State.STARTED);
+        mScenario.moveToState(Lifecycle.State.RESUMED);
+        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+    }
+
+    @After
+    public void cleanUp() {
+        mScenario.moveToState(Lifecycle.State.DESTROYED);
     }
 
     @Test
     public void doubleClickTestServiceAndClickDenyButton_permissionDialogDoesNotExist() {
-        final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario =
-                ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class);
-        scenario.moveToState(Lifecycle.State.CREATED);
-        scenario.moveToState(Lifecycle.State.STARTED);
-        scenario.moveToState(Lifecycle.State.RESUMED);
+        openShortcutsList();
 
-        onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot(
-                isDialog()).check(matches(isDisplayed()));
-        onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click());
-        onView(withText(TEST_LABEL)).perform(scrollTo(), doubleClick());
-        onView(withId(R.id.accessibility_permission_enable_deny_button)).perform(scrollTo(),
-                click());
+        // Performing the double-click is flaky so retry if needed.
+        for (int attempt = 1; attempt <= 2; attempt++) {
+            onView(withText(TEST_LABEL)).perform(scrollTo(), doubleClick());
+            if (mDevice.wait(Until.hasObject(By.text(DENY_LABEL)), UI_TIMEOUT_MS)) {
+                break;
+            }
+        }
+
+        onView(withText(DENY_LABEL)).perform(scrollTo(), click());
         InstrumentationRegistry.getInstrumentation().waitForIdleSync();
 
         onView(withId(R.id.accessibility_permissionDialog_title)).inRoot(isDialog()).check(
                 doesNotExist());
-        scenario.moveToState(Lifecycle.State.DESTROYED);
     }
 
     @Test
@@ -130,60 +152,42 @@
             throws Exception {
         when(mAccessibilityManagerService.isAccessibilityTargetAllowed(
                 eq(TEST_COMPONENT_NAME.getPackageName()), anyInt(), anyInt())).thenReturn(false);
-        final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario =
-                ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class);
-        scenario.onActivity(activity -> mActivity = activity);
-        scenario.moveToState(Lifecycle.State.CREATED);
-        scenario.moveToState(Lifecycle.State.STARTED);
-        scenario.moveToState(Lifecycle.State.RESUMED);
-
-        onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot(
-                isDialog()).check(matches(isDisplayed()));
-        onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click());
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+        openShortcutsList();
 
         onView(withText(TEST_LABEL)).perform(scrollTo(), click());
+
         verify(mAccessibilityManagerService).sendRestrictedDialogIntent(
                 eq(TEST_COMPONENT_NAME.getPackageName()), anyInt(), anyInt());
-        scenario.moveToState(Lifecycle.State.DESTROYED);
     }
 
     @Test
     public void popEditShortcutMenuList_oneHandedModeEnabled_shouldBeInListView() {
         TestUtils.setOneHandedModeEnabled(this, /* enabled= */ true);
-        final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario =
-                ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class);
-        scenario.moveToState(Lifecycle.State.CREATED);
-        scenario.moveToState(Lifecycle.State.STARTED);
-        scenario.moveToState(Lifecycle.State.RESUMED);
+        openShortcutsList();
 
-        onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot(
-                isDialog()).check(matches(isDisplayed()));
-        onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click());
         onView(allOf(withClassName(endsWith("ListView")), isDisplayed())).perform(swipeUp());
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+        mDevice.wait(Until.hasObject(By.text(ONE_HANDED_MODE)), UI_TIMEOUT_MS);
 
         onView(withText(ONE_HANDED_MODE)).inRoot(isDialog()).check(matches(isDisplayed()));
-        scenario.moveToState(Lifecycle.State.DESTROYED);
     }
 
     @Test
     public void popEditShortcutMenuList_oneHandedModeDisabled_shouldNotBeInListView() {
         TestUtils.setOneHandedModeEnabled(this, /* enabled= */ false);
-        final ActivityScenario<TestAccessibilityShortcutChooserActivity> scenario =
-                ActivityScenario.launch(TestAccessibilityShortcutChooserActivity.class);
-        scenario.moveToState(Lifecycle.State.CREATED);
-        scenario.moveToState(Lifecycle.State.STARTED);
-        scenario.moveToState(Lifecycle.State.RESUMED);
+        openShortcutsList();
 
-        onView(withText(R.string.accessibility_select_shortcut_menu_title)).inRoot(
-                isDialog()).check(matches(isDisplayed()));
-        onView(withText(R.string.edit_accessibility_shortcut_menu_button)).perform(click());
         onView(allOf(withClassName(endsWith("ListView")), isDisplayed())).perform(swipeUp());
         InstrumentationRegistry.getInstrumentation().waitForIdleSync();
 
         onView(withText(ONE_HANDED_MODE)).inRoot(isDialog()).check(doesNotExist());
-        scenario.moveToState(Lifecycle.State.DESTROYED);
+    }
+
+    private void openShortcutsList() {
+        UiObject2 editButton = mDevice.findObject(By.text(EDIT_LABEL));
+        if (editButton != null) {
+            editButton.click();
+        }
+        mDevice.wait(Until.hasObject(By.textStartsWith(LIST_TITLE_LABEL)), UI_TIMEOUT_MS);
     }
 
     /**
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/expresslog/AndroidManifest.xml b/core/tests/expresslog/AndroidManifest.xml
deleted file mode 100644
index 94a39e0..0000000
--- a/core/tests/expresslog/AndroidManifest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          android:installLocation="internalOnly"
-          package="com.android.internal.expresslog" >
-
-    <application >
-        <uses-library android:name="android.test.runner" />
-    </application>
-
-    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
-            android:targetPackage="com.android.internal.expresslog"
-            android:label="Telemetry Express Logging Helper Tests" />
-
-</manifest>
diff --git a/core/tests/expresslog/OWNERS b/core/tests/expresslog/OWNERS
deleted file mode 100644
index 3dc958b..0000000
--- a/core/tests/expresslog/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-# Bug component: 719316
-# Stats/expresslog
-file:/services/core/java/com/android/server/stats/OWNERS
diff --git a/core/tests/expresslog/TEST_MAPPING b/core/tests/expresslog/TEST_MAPPING
deleted file mode 100644
index c9b0cf8..0000000
--- a/core/tests/expresslog/TEST_MAPPING
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "presubmit": [
-    {
-      "name": "ExpressLogTests",
-      "options": [
-        {
-          "exclude-annotation": "org.junit.Ignore"
-        }
-      ]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/core/tests/expresslog/src/com/android/internal/expresslog/ScaledRangeOptionsTest.java b/core/tests/expresslog/src/com/android/internal/expresslog/ScaledRangeOptionsTest.java
deleted file mode 100644
index ee62d75..0000000
--- a/core/tests/expresslog/src/com/android/internal/expresslog/ScaledRangeOptionsTest.java
+++ /dev/null
@@ -1,167 +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.internal.expresslog;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-@RunWith(JUnit4.class)
-@SmallTest
-public class ScaledRangeOptionsTest {
-    private static final String TAG = ScaledRangeOptionsTest.class.getSimpleName();
-
-    @Test
-    public void testGetBinsCount() {
-        Histogram.ScaledRangeOptions options1 = new Histogram.ScaledRangeOptions(1, 100, 100, 2);
-        assertEquals(3, options1.getBinsCount());
-
-        Histogram.ScaledRangeOptions options10 = new Histogram.ScaledRangeOptions(10, 100, 100, 2);
-        assertEquals(12, options10.getBinsCount());
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructZeroBinsCount() {
-        new Histogram.ScaledRangeOptions(0, 100, 100, 2);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructNegativeBinsCount() {
-        new Histogram.ScaledRangeOptions(-1, 100, 100, 2);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructNegativeFirstBinWidth() {
-        new Histogram.ScaledRangeOptions(10, 100, -100, 2);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructTooSmallFirstBinWidth() {
-        new Histogram.ScaledRangeOptions(10, 100, 0.5f, 2);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructNegativeScaleFactor() {
-        new Histogram.ScaledRangeOptions(10, 100, 100, -2);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructTooSmallScaleFactor() {
-        new Histogram.ScaledRangeOptions(10, 100, 100, 0.5f);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructTooBigScaleFactor() {
-        new Histogram.ScaledRangeOptions(10, 100, 100, 500.f);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructTooBigBinRange() {
-        new Histogram.ScaledRangeOptions(100, 100, 100, 10.f);
-    }
-
-    @Test
-    public void testBinIndexForRangeEqual1() {
-        Histogram.ScaledRangeOptions options = new Histogram.ScaledRangeOptions(10, 1, 1, 1);
-        assertEquals(12, options.getBinsCount());
-
-        assertEquals(11, options.getBinForSample(11));
-
-        for (int i = 0, bins = options.getBinsCount(); i < bins; i++) {
-            assertEquals(i, options.getBinForSample(i));
-        }
-    }
-
-    @Test
-    public void testBinIndexForRangeEqual2() {
-        // this should produce bin otpions similar to linear histogram with bin width 2
-        Histogram.ScaledRangeOptions options = new Histogram.ScaledRangeOptions(10, 1, 2, 1);
-        assertEquals(12, options.getBinsCount());
-
-        for (int i = 0, bins = options.getBinsCount(); i < bins; i++) {
-            assertEquals(i, options.getBinForSample(i * 2));
-            assertEquals(i, options.getBinForSample(i * 2 - 1));
-        }
-    }
-
-    @Test
-    public void testBinIndexForRangeEqual5() {
-        Histogram.ScaledRangeOptions options = new Histogram.ScaledRangeOptions(2, 0, 5, 1);
-        assertEquals(4, options.getBinsCount());
-        for (int i = 0; i < 2; i++) {
-            for (int sample = 0; sample < 5; sample++) {
-                assertEquals(i + 1, options.getBinForSample(i * 5 + sample));
-            }
-        }
-    }
-
-    @Test
-    public void testBinIndexForRangeEqual10() {
-        Histogram.ScaledRangeOptions options = new Histogram.ScaledRangeOptions(10, 1, 10, 1);
-        assertEquals(0, options.getBinForSample(0));
-        assertEquals(options.getBinsCount() - 2, options.getBinForSample(100));
-        assertEquals(options.getBinsCount() - 1, options.getBinForSample(101));
-
-        final float binSize = (101 - 1) / 10f;
-        for (int i = 1, bins = options.getBinsCount() - 1; i < bins; i++) {
-            assertEquals(i, options.getBinForSample(i * binSize));
-        }
-    }
-
-    @Test
-    public void testBinIndexForScaleFactor2() {
-        final int binsCount = 10;
-        final int minValue = 10;
-        final int firstBinWidth = 5;
-        final int scaledFactor = 2;
-
-        Histogram.ScaledRangeOptions options = new Histogram.ScaledRangeOptions(
-                binsCount, minValue, firstBinWidth, scaledFactor);
-        assertEquals(binsCount + 2, options.getBinsCount());
-        long[] binCounts = new long[10];
-
-        // precalculate max valid value - start value for the overflow bin
-        int lastBinStartValue = minValue; //firstBinMin value
-        int lastBinWidth = firstBinWidth;
-        for (int binIdx = 2; binIdx <= binsCount + 1; binIdx++) {
-            lastBinStartValue = lastBinStartValue + lastBinWidth;
-            lastBinWidth *= scaledFactor;
-        }
-
-        // underflow bin
-        for (int i = 1; i < minValue; i++) {
-            assertEquals(0, options.getBinForSample(i));
-        }
-
-        for (int i = 10; i < lastBinStartValue; i++) {
-            assertTrue(options.getBinForSample(i) > 0);
-            assertTrue(options.getBinForSample(i) <= binsCount);
-            binCounts[options.getBinForSample(i) - 1]++;
-        }
-
-        // overflow bin
-        assertEquals(binsCount + 1, options.getBinForSample(lastBinStartValue));
-
-        for (int i = 1; i < binsCount; i++) {
-            assertEquals(binCounts[i], binCounts[i - 1] * 2L);
-        }
-    }
-}
diff --git a/core/tests/expresslog/src/com/android/internal/expresslog/UniformOptionsTest.java b/core/tests/expresslog/src/com/android/internal/expresslog/UniformOptionsTest.java
deleted file mode 100644
index 037dbb3..0000000
--- a/core/tests/expresslog/src/com/android/internal/expresslog/UniformOptionsTest.java
+++ /dev/null
@@ -1,125 +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.internal.expresslog;
-
-import androidx.test.filters.SmallTest;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-@RunWith(JUnit4.class)
-@SmallTest
-public class UniformOptionsTest {
-    private static final String TAG = UniformOptionsTest.class.getSimpleName();
-
-    @Test
-    public void testGetBinsCount() {
-        Histogram.UniformOptions options1 = new Histogram.UniformOptions(1, 100, 1000);
-        assertEquals(3, options1.getBinsCount());
-
-        Histogram.UniformOptions options10 = new Histogram.UniformOptions(10, 100, 1000);
-        assertEquals(12, options10.getBinsCount());
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructZeroBinsCount() {
-        new Histogram.UniformOptions(0, 100, 1000);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructNegativeBinsCount() {
-        new Histogram.UniformOptions(-1, 100, 1000);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testConstructMaxValueLessThanMinValue() {
-        new Histogram.UniformOptions(10, 1000, 100);
-    }
-
-    @Test
-    public void testBinIndexForRangeEqual1() {
-        Histogram.UniformOptions options = new Histogram.UniformOptions(10, 1, 11);
-        for (int i = 0, bins = options.getBinsCount(); i < bins; i++) {
-            assertEquals(i, options.getBinForSample(i));
-        }
-    }
-
-    @Test
-    public void testBinIndexForRangeEqual2() {
-        Histogram.UniformOptions options = new Histogram.UniformOptions(10, 1, 21);
-        for (int i = 0, bins = options.getBinsCount(); i < bins; i++) {
-            assertEquals(i, options.getBinForSample(i * 2));
-            assertEquals(i, options.getBinForSample(i * 2 - 1));
-        }
-    }
-
-    @Test
-    public void testBinIndexForRangeEqual5() {
-        Histogram.UniformOptions options = new Histogram.UniformOptions(2, 0, 10);
-        assertEquals(4, options.getBinsCount());
-        for (int i = 0; i < 2; i++) {
-            for (int sample = 0; sample < 5; sample++) {
-                assertEquals(i + 1, options.getBinForSample(i * 5 + sample));
-            }
-        }
-    }
-
-    @Test
-    public void testBinIndexForRangeEqual10() {
-        Histogram.UniformOptions options = new Histogram.UniformOptions(10, 1, 101);
-        assertEquals(0, options.getBinForSample(0));
-        assertEquals(options.getBinsCount() - 2, options.getBinForSample(100));
-        assertEquals(options.getBinsCount() - 1, options.getBinForSample(101));
-
-        final float binSize = (101 - 1) / 10f;
-        for (int i = 1, bins = options.getBinsCount() - 1; i < bins; i++) {
-            assertEquals(i, options.getBinForSample(i * binSize));
-        }
-    }
-
-    @Test
-    public void testBinIndexForRangeEqual90() {
-        final int binCount = 10;
-        final int minValue = 100;
-        final int maxValue = 100000;
-
-        Histogram.UniformOptions options = new Histogram.UniformOptions(binCount, minValue,
-                maxValue);
-
-        // logging underflow sample
-        assertEquals(0, options.getBinForSample(minValue - 1));
-
-        // logging overflow sample
-        assertEquals(binCount + 1, options.getBinForSample(maxValue));
-        assertEquals(binCount + 1, options.getBinForSample(maxValue + 1));
-
-        // logging min edge sample
-        assertEquals(1, options.getBinForSample(minValue));
-
-        // logging max edge sample
-        assertEquals(binCount, options.getBinForSample(maxValue - 1));
-
-        // logging single valid sample per bin
-        final int binSize = (maxValue - minValue) / binCount;
-
-        for (int i = 0; i < binCount; i++) {
-            assertEquals(i + 1, options.getBinForSample(minValue + binSize * i));
-        }
-    }
-}
diff --git a/core/tests/mockingcoretests/src/android/view/DisplayTest.java b/core/tests/mockingcoretests/src/android/view/DisplayTest.java
index 4a12bb3..5e617fd 100644
--- a/core/tests/mockingcoretests/src/android/view/DisplayTest.java
+++ b/core/tests/mockingcoretests/src/android/view/DisplayTest.java
@@ -460,6 +460,36 @@
         assertArrayEquals(sortedHdrTypes, displayMode.getSupportedHdrTypes());
     }
 
+    @Test
+    public void testGetSupportedHdrTypesReturnsCopy() {
+        int[] hdrTypes = new int[]{1, 2, 3};
+        Display.Mode displayMode = new Display.Mode(0, 0, 0, 0, new float[0], hdrTypes);
+
+        int[] hdrTypesCopy = displayMode.getSupportedHdrTypes();
+        hdrTypesCopy[0] = 0;
+        assertArrayEquals(hdrTypes, displayMode.getSupportedHdrTypes());
+    }
+
+    @Test
+    public void testGetAlternativeRefreshRatesReturnsCopy() {
+        float[] alternativeRates = new float[]{1.0f, 2.0f};
+        Display.Mode displayMode = new Display.Mode(0, 0, 0, 0, alternativeRates, new int[0]);
+
+        float[] alternativeRatesCopy = displayMode.getAlternativeRefreshRates();
+        alternativeRatesCopy[0] = 0.0f;
+        assertArrayEquals(alternativeRates, displayMode.getAlternativeRefreshRates(), 0.0f);
+    }
+
+    @Test
+    public void testHdrCapabilitiesGetSupportedHdrTypesReturnsCopy() {
+        int[] hdrTypes = new int[]{1, 2, 3};
+        Display.HdrCapabilities hdrCapabilities = new Display.HdrCapabilities(hdrTypes, 0, 0, 0);
+
+        int[] hdrTypesCopy = hdrCapabilities.getSupportedHdrTypes();
+        hdrTypesCopy[0] = 0;
+        assertArrayEquals(hdrTypes, hdrCapabilities.getSupportedHdrTypes());
+    }
+
     // Given rotated display dimensions, calculate the letterboxed app bounds.
     private static Rect buildAppBounds(int displayWidth, int displayHeight) {
         final int midWidth = displayWidth / 2;
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/preinstalled-packages-platform-overlays.xml b/data/etc/preinstalled-packages-platform-overlays.xml
index 9959433..cea535e 100644
--- a/data/etc/preinstalled-packages-platform-overlays.xml
+++ b/data/etc/preinstalled-packages-platform-overlays.xml
@@ -56,6 +56,10 @@
     <install-in-user-type package="com.android.internal.systemui.navbar.transparent">
         <install-in user-type="FULL" />
     </install-in-user-type>
+    <install-in-user-type package="com.android.role.notes.enabled">
+        <install-in user-type="FULL" />
+        <install-in user-type="PROFILE" />
+    </install-in-user-type>
     <install-in-user-type package="com.android.theme.color.amethyst">
         <install-in user-type="FULL" />
         <install-in user-type="PROFILE" />
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/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json
index 0eb4caa..549ac58 100644
--- a/data/etc/services.core.protolog.json
+++ b/data/etc/services.core.protolog.json
@@ -175,12 +175,6 @@
       "group": "WM_ERROR",
       "at": "com\/android\/server\/wm\/WindowManagerService.java"
     },
-    "-1941440781": {
-      "message": "Creating Pending Move-to-back: %s",
-      "level": "VERBOSE",
-      "group": "WM_DEBUG_WINDOW_TRANSITIONS",
-      "at": "com\/android\/server\/wm\/Task.java"
-    },
     "-1939861963": {
       "message": "Create root task displayId=%d winMode=%d",
       "level": "VERBOSE",
@@ -631,12 +625,6 @@
       "group": "WM_DEBUG_CONFIGURATION",
       "at": "com\/android\/server\/wm\/ActivityStarter.java"
     },
-    "-1484988952": {
-      "message": "Creating Pending Multiwindow Fullscreen Request: %s",
-      "level": "VERBOSE",
-      "group": "WM_DEBUG_WINDOW_TRANSITIONS",
-      "at": "com\/android\/server\/wm\/ActivityClientController.java"
-    },
     "-1483435730": {
       "message": "InsetsSource setWin %s for type %s",
       "level": "DEBUG",
@@ -2605,12 +2593,6 @@
       "group": "WM_DEBUG_ANIM",
       "at": "com\/android\/server\/wm\/WindowState.java"
     },
-    "286170861": {
-      "message": "Creating Pending Transition for TaskFragment: %s",
-      "level": "VERBOSE",
-      "group": "WM_DEBUG_WINDOW_TRANSITIONS",
-      "at": "com\/android\/server\/wm\/WindowOrganizerController.java"
-    },
     "288485303": {
       "message": "Attempted to set remove mode to a display that does not exist: %d",
       "level": "WARN",
@@ -3193,12 +3175,6 @@
       "group": "WM_DEBUG_APP_TRANSITIONS",
       "at": "com\/android\/server\/wm\/AppTransitionController.java"
     },
-    "800698875": {
-      "message": "SyncGroup %d: Started when there is other active SyncGroup",
-      "level": "WARN",
-      "group": "WM_DEBUG_SYNC_ENGINE",
-      "at": "com\/android\/server\/wm\/BLASTSyncEngine.java"
-    },
     "801521566": {
       "message": "Content Recording: Attempting to mirror %d from %d but no DisplayContent associated. Changing to mirror default display.",
       "level": "WARN",
@@ -3259,12 +3235,6 @@
       "group": "WM_DEBUG_STATES",
       "at": "com\/android\/server\/wm\/RootWindowContainer.java"
     },
-    "898260097": {
-      "message": "Creating Pending Pip-Enter: %s",
-      "level": "VERBOSE",
-      "group": "WM_DEBUG_WINDOW_TRANSITIONS",
-      "at": "com\/android\/server\/wm\/ActivityTaskManagerService.java"
-    },
     "898863925": {
       "message": "Attempted to add QS dialog window with unknown token %s.  Aborting.",
       "level": "WARN",
@@ -3835,6 +3805,12 @@
       "group": "WM_DEBUG_APP_TRANSITIONS_ANIM",
       "at": "com\/android\/server\/wm\/AppTransitionController.java"
     },
+    "1463355909": {
+      "message": "Queueing legacy sync-set: %s",
+      "level": "VERBOSE",
+      "group": "WM_DEBUG_WINDOW_TRANSITIONS_MIN",
+      "at": "com\/android\/server\/wm\/TransitionController.java"
+    },
     "1469310004": {
       "message": "          SKIP: common mode mismatch. was %s",
       "level": "VERBOSE",
@@ -4009,12 +3985,6 @@
       "group": "WM_DEBUG_CONTENT_RECORDING",
       "at": "com\/android\/server\/wm\/ContentRecorder.java"
     },
-    "1667162379": {
-      "message": "Creating Pending Transition: %s",
-      "level": "VERBOSE",
-      "group": "WM_DEBUG_WINDOW_TRANSITIONS",
-      "at": "com\/android\/server\/wm\/WindowOrganizerController.java"
-    },
     "1670933628": {
       "message": " Setting allReady override",
       "level": "VERBOSE",
@@ -4075,6 +4045,12 @@
       "group": "WM_DEBUG_SYNC_ENGINE",
       "at": "com\/android\/server\/wm\/BLASTSyncEngine.java"
     },
+    "1735199721": {
+      "message": "Queueing transition: %s",
+      "level": "VERBOSE",
+      "group": "WM_DEBUG_WINDOW_TRANSITIONS_MIN",
+      "at": "com\/android\/server\/wm\/TransitionController.java"
+    },
     "1739298851": {
       "message": "removeWindowToken: Attempted to remove token: %s for non-exiting displayId=%d",
       "level": "WARN",
diff --git a/data/keyboards/GoogleTV-Remote.idc b/data/keyboards/GoogleTV-Remote.idc
new file mode 100644
index 0000000..14fb4e2
--- /dev/null
+++ b/data/keyboards/GoogleTV-Remote.idc
@@ -0,0 +1,25 @@
+# Copyright 2023 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Input Device Configuration file for Google Reference Remote Control Unit (RCU).
+#
+#
+
+# Basic Parameters
+# Depending on the FLASH configurations, RCUs may have PID 0006 instead
+# of 0001.
+keyboard.layout = Vendor_0957_Product_0001
+keyboard.doNotWakeByDefault = 1
+audio.mic = 1
diff --git a/graphics/java/android/graphics/BLASTBufferQueue.java b/graphics/java/android/graphics/BLASTBufferQueue.java
index 9940ca3..c52f700 100644
--- a/graphics/java/android/graphics/BLASTBufferQueue.java
+++ b/graphics/java/android/graphics/BLASTBufferQueue.java
@@ -16,6 +16,7 @@
 
 package android.graphics;
 
+import android.annotation.NonNull;
 import android.view.Surface;
 import android.view.SurfaceControl;
 
@@ -31,9 +32,10 @@
     private static native long nativeCreate(String name, boolean updateDestinationFrame);
     private static native void nativeDestroy(long ptr);
     private static native Surface nativeGetSurface(long ptr, boolean includeSurfaceControlHandle);
-    private static native void nativeSyncNextTransaction(long ptr,
+    private static native boolean nativeSyncNextTransaction(long ptr,
             Consumer<SurfaceControl.Transaction> callback, boolean acquireSingleBuffer);
     private static native void nativeStopContinuousSyncTransaction(long ptr);
+    private static native void nativeClearSyncTransaction(long ptr);
     private static native void nativeUpdate(long ptr, long surfaceControl, long width, long height,
             int format);
     private static native void nativeMergeWithNextTransaction(long ptr, long transactionPtr,
@@ -92,9 +94,9 @@
      *                            acquired. If false, continue to acquire all buffers into the
      *                            transaction until stopContinuousSyncTransaction is called.
      */
-    public void syncNextTransaction(boolean acquireSingleBuffer,
-            Consumer<SurfaceControl.Transaction> callback) {
-        nativeSyncNextTransaction(mNativeObject, callback, acquireSingleBuffer);
+    public boolean syncNextTransaction(boolean acquireSingleBuffer,
+            @NonNull Consumer<SurfaceControl.Transaction> callback) {
+        return nativeSyncNextTransaction(mNativeObject, callback, acquireSingleBuffer);
     }
 
     /**
@@ -104,8 +106,8 @@
      * @param callback The callback invoked when the buffer has been added to the transaction. The
      *                 callback will contain the transaction with the buffer.
      */
-    public void syncNextTransaction(Consumer<SurfaceControl.Transaction> callback) {
-        syncNextTransaction(true /* acquireSingleBuffer */, callback);
+    public boolean syncNextTransaction(@NonNull Consumer<SurfaceControl.Transaction> callback) {
+        return syncNextTransaction(true /* acquireSingleBuffer */, callback);
     }
 
     /**
@@ -118,6 +120,14 @@
     }
 
     /**
+     * Tell BBQ to clear the sync transaction that was previously set. The callback will not be
+     * invoked when the next frame is acquired.
+     */
+    public void clearSyncTransaction() {
+        nativeClearSyncTransaction(mNativeObject);
+    }
+
+    /**
      * Updates {@link SurfaceControl}, size, and format for a particular BLASTBufferQueue
      * @param sc The new SurfaceControl that this BLASTBufferQueue will update
      * @param width The new width for the buffer.
diff --git a/graphics/java/android/graphics/ImageDecoder.java b/graphics/java/android/graphics/ImageDecoder.java
index 0b29973..302c72e 100644
--- a/graphics/java/android/graphics/ImageDecoder.java
+++ b/graphics/java/android/graphics/ImageDecoder.java
@@ -42,7 +42,6 @@
 import android.media.MediaCodecList;
 import android.net.Uri;
 import android.os.Build;
-import android.os.SystemProperties;
 import android.os.Trace;
 import android.system.ErrnoException;
 import android.system.Os;
@@ -2069,50 +2068,67 @@
     }
 
     private static boolean sIsP010SupportedForAV1 = false;
-    private static boolean sIsP010SupportedForAV1Initialized = false;
-    private static final Object sIsP010SupportedForAV1Lock = new Object();
+    private static boolean sIsP010SupportedForHEVC = false;
+    private static boolean sIsP010SupportedFlagsInitialized = false;
+    private static final Object sIsP010SupportedLock = new Object();
 
     /**
      * Checks if the device supports decoding 10-bit AV1.
      */
     @SuppressWarnings("AndroidFrameworkCompatChange")  // This is not an app-visible API.
     private static boolean isP010SupportedForAV1() {
-        synchronized (sIsP010SupportedForAV1Lock) {
-            if (sIsP010SupportedForAV1Initialized) {
+        synchronized (sIsP010SupportedLock) {
+            if (sIsP010SupportedFlagsInitialized) {
                 return sIsP010SupportedForAV1;
             }
-
-            sIsP010SupportedForAV1Initialized = true;
-
-            if (hasHardwareDecoder("video/av01")) {
-                sIsP010SupportedForAV1 = true;
-                return true;
-            }
-
-            sIsP010SupportedForAV1 = Build.VERSION.DEVICE_INITIAL_SDK_INT
-                    >= Build.VERSION_CODES.S;
+            checkP010SupportforAV1HEVC();
             return sIsP010SupportedForAV1;
         }
     }
 
     /**
-     * Checks if the device has hardware decoder for the target mime type.
+     * Checks if the device supports decoding 10-bit HEVC.
+     * This method is called by JNI.
      */
-    private static boolean hasHardwareDecoder(String mime) {
-        final MediaCodecList sMCL = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
-        for (MediaCodecInfo info : sMCL.getCodecInfos()) {
-            if (info.isEncoder() == false && info.isHardwareAccelerated()) {
-                try {
-                     if (info.getCapabilitiesForType(mime) != null) {
-                         return true;
-                     }
-                } catch (IllegalArgumentException e) {
-                     // mime is not supported
-                     return false;
+    @SuppressWarnings("unused")
+    private static boolean isP010SupportedForHEVC() {
+        synchronized (sIsP010SupportedLock) {
+            if (sIsP010SupportedFlagsInitialized) {
+                return sIsP010SupportedForHEVC;
+            }
+            checkP010SupportforAV1HEVC();
+            return sIsP010SupportedForHEVC;
+        }
+    }
+
+    /**
+     * Checks if the device supports decoding 10-bit for the given mime type.
+     */
+    private static void checkP010SupportforAV1HEVC() {
+        MediaCodecList codecList = new MediaCodecList(MediaCodecList.ALL_CODECS);
+        for (MediaCodecInfo mediaCodecInfo : codecList.getCodecInfos()) {
+            if (mediaCodecInfo.isEncoder()) {
+                continue;
+            }
+            for (String mediaType : mediaCodecInfo.getSupportedTypes()) {
+                if (mediaType.equalsIgnoreCase("video/av01")
+                        || mediaType.equalsIgnoreCase("video/hevc")) {
+                    MediaCodecInfo.CodecCapabilities codecCapabilities =
+                        mediaCodecInfo.getCapabilitiesForType(mediaType);
+                    for (int i = 0; i < codecCapabilities.colorFormats.length; ++i) {
+                        if (codecCapabilities.colorFormats[i]
+                            == MediaCodecInfo.CodecCapabilities.COLOR_FormatYUVP010) {
+                            if (mediaType.equalsIgnoreCase("video/av01")) {
+                                sIsP010SupportedForAV1 = true;
+                            } else {
+                                sIsP010SupportedForHEVC = true;
+                            }
+                        }
+                    }
                 }
             }
         }
-        return false;
+        sIsP010SupportedFlagsInitialized = true;
     }
 
     /**
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/Android.bp b/libs/WindowManager/Jetpack/Android.bp
index a5b192c..abe8f85 100644
--- a/libs/WindowManager/Jetpack/Android.bp
+++ b/libs/WindowManager/Jetpack/Android.bp
@@ -55,20 +55,6 @@
 }
 
 // Extensions
-// NOTE: This module is still under active development and must not
-// be used in production. Use 'androidx.window.sidecar' instead.
-android_library_import {
-    name: "window-extensions",
-    aars: ["window-extensions-release.aar"],
-    sdk_version: "current",
-}
-
-android_library_import {
-    name: "window-extensions-core",
-    aars: ["window-extensions-core-release.aar"],
-    sdk_version: "current",
-}
-
 java_library {
     name: "androidx.window.extensions",
     srcs: [
@@ -77,8 +63,8 @@
         "src/androidx/window/common/**/*.java",
     ],
     static_libs: [
-        "window-extensions",
-        "window-extensions-core",
+        "androidx.window.extensions_extensions-nodeps",
+        "androidx.window.extensions.core_core-nodeps",
     ],
     installable: true,
     sdk_version: "core_platform",
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 575b0ce..abf2301 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
@@ -129,12 +129,9 @@
      * {@link WindowAreaComponent#STATUS_AVAILABLE} or
      * {@link WindowAreaComponent#STATUS_UNAVAILABLE} if the feature is supported or not in that
      * state respectively. When the rear display feature is triggered, the status is updated to be
-     * {@link WindowAreaComponent#STATUS_UNAVAILABLE}.
+     * {@link WindowAreaComponent#STATUS_ACTIVE}.
      * TODO(b/240727590): Prefix with AREA_
      *
-     * TODO(b/239833099): Add a STATUS_ACTIVE option to let apps know if a feature is currently
-     *  enabled.
-     *
      * @param consumer {@link Consumer} interested in receiving updates to the status of
      * rear display mode.
      */
@@ -331,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;
                             }
@@ -407,18 +404,20 @@
         }
     }
 
-
     @GuardedBy("mLock")
     private int getCurrentRearDisplayModeStatus() {
         if (mRearDisplayState == INVALID_DEVICE_STATE) {
             return WindowAreaComponent.STATUS_UNSUPPORTED;
         }
 
-        if (mRearDisplaySessionStatus == WindowAreaComponent.SESSION_STATE_ACTIVE
-                || !ArrayUtils.contains(mCurrentSupportedDeviceStates, mRearDisplayState)
-                || isRearDisplayActive()) {
+        if (!ArrayUtils.contains(mCurrentSupportedDeviceStates, mRearDisplayState)) {
             return WindowAreaComponent.STATUS_UNAVAILABLE;
         }
+
+        if (isRearDisplayActive()) {
+            return WindowAreaComponent.STATUS_ACTIVE;
+        }
+
         return WindowAreaComponent.STATUS_AVAILABLE;
     }
 
@@ -537,7 +536,6 @@
                 if (request.equals(mRearDisplayStateRequest)) {
                     mRearDisplaySessionStatus = WindowAreaComponent.SESSION_STATE_ACTIVE;
                     mRearDisplaySessionCallback.accept(mRearDisplaySessionStatus);
-                    updateRearDisplayStatusListeners(getCurrentRearDisplayModeStatus());
                 }
             }
         }
@@ -550,7 +548,6 @@
                 }
                 mRearDisplaySessionStatus = WindowAreaComponent.SESSION_STATE_INACTIVE;
                 mRearDisplaySessionCallback.accept(mRearDisplaySessionStatus);
-                updateRearDisplayStatusListeners(getCurrentRearDisplayModeStatus());
             }
         }
     }
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java
index 8386131..a7a6b3c 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java
@@ -122,16 +122,6 @@
         addWindowLayoutInfoListener(activity, extConsumer);
     }
 
-    @Override
-    public void addWindowLayoutInfoListener(@NonNull @UiContext Context context,
-            @NonNull java.util.function.Consumer<WindowLayoutInfo> consumer) {
-        final Consumer<WindowLayoutInfo> extConsumer = consumer::accept;
-        synchronized (mLock) {
-            mJavaToExtConsumers.put(consumer, extConsumer);
-        }
-        addWindowLayoutInfoListener(context, extConsumer);
-    }
-
     /**
      * Similar to {@link #addWindowLayoutInfoListener(Activity, java.util.function.Consumer)}, but
      * takes a UI Context as a parameter.
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/Jetpack/window-extensions-core-release.aar b/libs/WindowManager/Jetpack/window-extensions-core-release.aar
deleted file mode 100644
index 96ff840..0000000
--- a/libs/WindowManager/Jetpack/window-extensions-core-release.aar
+++ /dev/null
Binary files differ
diff --git a/libs/WindowManager/Jetpack/window-extensions-release.aar b/libs/WindowManager/Jetpack/window-extensions-release.aar
deleted file mode 100644
index c3b6916..0000000
--- a/libs/WindowManager/Jetpack/window-extensions-release.aar
+++ /dev/null
Binary files differ
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‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎move 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/activityembedding/ActivityEmbeddingController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingController.java
index 521a65c..bfbddbb 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingController.java
@@ -22,6 +22,7 @@
 import static java.util.Objects.requireNonNull;
 
 import android.content.Context;
+import android.graphics.Rect;
 import android.os.IBinder;
 import android.util.ArrayMap;
 import android.view.SurfaceControl;
@@ -35,6 +36,9 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.transition.Transitions;
+import com.android.wm.shell.util.TransitionUtil;
+
+import java.util.List;
 
 /**
  * Responsible for handling ActivityEmbedding related transitions.
@@ -86,12 +90,13 @@
             @NonNull SurfaceControl.Transaction finishTransaction,
             @NonNull Transitions.TransitionFinishCallback finishCallback) {
         boolean containsEmbeddingSplit = false;
-        for (TransitionInfo.Change change : info.getChanges()) {
+        boolean containsNonEmbeddedChange = false;
+        final List<TransitionInfo.Change> changes = info.getChanges();
+        for (int i = changes.size() - 1; i >= 0; i--) {
+            final TransitionInfo.Change change = changes.get(i);
             if (!change.hasFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY)) {
-                // Only animate the transition if all changes are in a Task with ActivityEmbedding.
-                return false;
-            }
-            if (!containsEmbeddingSplit && !change.hasFlags(FLAG_FILLS_TASK)) {
+                containsNonEmbeddedChange = true;
+            } else if (!change.hasFlags(FLAG_FILLS_TASK)) {
                 // Whether the Task contains any ActivityEmbedding split before or after the
                 // transition.
                 containsEmbeddingSplit = true;
@@ -103,6 +108,9 @@
             // such as the device is in a folded state.
             return false;
         }
+        if (containsNonEmbeddedChange && !handleNonEmbeddedChanges(changes)) {
+            return false;
+        }
 
         // Start ActivityEmbedding animation.
         mTransitionCallbacks.put(transition, finishCallback);
@@ -110,6 +118,37 @@
         return true;
     }
 
+    private boolean handleNonEmbeddedChanges(List<TransitionInfo.Change> changes) {
+        final Rect nonClosingEmbeddedArea = new Rect();
+        for (int i = changes.size() - 1; i >= 0; i--) {
+            final TransitionInfo.Change change = changes.get(i);
+            if (!TransitionUtil.isClosingType(change.getMode())) {
+                if (change.hasFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY)) {
+                    nonClosingEmbeddedArea.union(change.getEndAbsBounds());
+                    continue;
+                }
+                // Not able to handle non-embedded container if it is not closing.
+                return false;
+            }
+        }
+        for (int i = changes.size() - 1; i >= 0; i--) {
+            final TransitionInfo.Change change = changes.get(i);
+            if (!change.hasFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY)
+                    && !nonClosingEmbeddedArea.contains(change.getEndAbsBounds())) {
+                // Unknown to animate containers outside the area of embedded activities.
+                return false;
+            }
+        }
+        // Drop the non-embedded closing change because it is occluded by embedded activities.
+        for (int i = changes.size() - 1; i >= 0; i--) {
+            final TransitionInfo.Change change = changes.get(i);
+            if (!change.hasFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY)) {
+                changes.remove(i);
+            }
+        }
+        return true;
+    }
+
     @Nullable
     @Override
     public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimation.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimation.java
index e84a78f..133fd87 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimation.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimation.java
@@ -33,12 +33,19 @@
      *
      * @param touchX the X touch position of the {@link MotionEvent}.
      * @param touchY the Y touch position of the {@link MotionEvent}.
+     * @param velocityX the X velocity computed from the {@link MotionEvent}.
+     * @param velocityY the Y velocity computed from the {@link MotionEvent}.
      * @param keyAction the original {@link KeyEvent#getAction()} when the event was dispatched to
      *               the process. This is forwarded separately because the input pipeline may mutate
      *               the {#event} action state later.
      * @param swipeEdge the edge from which the swipe begins.
      */
-    void onBackMotion(float touchX, float touchY, int keyAction,
+    void onBackMotion(
+            float touchX,
+            float touchY,
+            float velocityX,
+            float velocityY,
+            int keyAction,
             @BackEvent.SwipeEdge int swipeEdge);
 
     /**
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 04f8477..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
@@ -256,8 +279,20 @@
     private class BackAnimationImpl implements BackAnimation {
         @Override
         public void onBackMotion(
-                float touchX, float touchY, int keyAction, @BackEvent.SwipeEdge int swipeEdge) {
-            mShellExecutor.execute(() -> onMotionEvent(touchX, touchY, keyAction, swipeEdge));
+                float touchX,
+                float touchY,
+                float velocityX,
+                float velocityY,
+                int keyAction,
+                @BackEvent.SwipeEdge int swipeEdge
+        ) {
+            mShellExecutor.execute(() -> onMotionEvent(
+                    /* touchX = */ touchX,
+                    /* touchY = */ touchY,
+                    /* velocityX = */ velocityX,
+                    /* velocityY = */ velocityY,
+                    /* keyAction = */ keyAction,
+                    /* swipeEdge = */ swipeEdge));
         }
 
         @Override
@@ -332,13 +367,18 @@
      * Called when a new motion event needs to be transferred to this
      * {@link BackAnimationController}
      */
-    public void onMotionEvent(float touchX, float touchY, int keyAction,
+    public void onMotionEvent(
+            float touchX,
+            float touchY,
+            float velocityX,
+            float velocityY,
+            int keyAction,
             @BackEvent.SwipeEdge int swipeEdge) {
         if (mPostCommitAnimationInProgress) {
             return;
         }
 
-        mTouchTracker.update(touchX, touchY);
+        mTouchTracker.update(touchX, touchY, velocityX, velocityY);
         if (keyAction == MotionEvent.ACTION_DOWN) {
             if (!mBackGestureStarted) {
                 mShouldStartOnNextMoveEvent = true;
@@ -448,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;
@@ -513,7 +625,7 @@
         if (mBackNavigationInfo != null) {
             final IOnBackInvokedCallback callback = mBackNavigationInfo.getOnBackInvokedCallback();
             if (mTriggerBack) {
-                dispatchOnBackInvoked(callback);
+                dispatchOrAnimateOnBackInvoked(callback);
             } else {
                 dispatchOnBackCancelled(callback);
             }
@@ -588,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 695ef4e..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;
@@ -42,11 +45,13 @@
      */
     private float mInitTouchX;
     private float mInitTouchY;
+    private float mLatestVelocityX;
+    private float mLatestVelocityY;
     private float mStartThresholdX;
     private int mSwipeEdge;
     private boolean mCancelled;
 
-    void update(float touchX, float touchY) {
+    void update(float touchX, float touchY, float velocityX, float velocityY) {
         /**
          * If back was previously cancelled but the user has started swiping in the forward
          * direction again, restart back.
@@ -58,6 +63,8 @@
         }
         mLatestTouchX = touchX;
         mLatestTouchY = touchY;
+        mLatestVelocityX = velocityX;
+        mLatestVelocityY = velocityY;
     }
 
     void setTriggerBack(boolean triggerBack) {
@@ -84,34 +91,62 @@
     }
 
     BackMotionEvent createStartEvent(RemoteAnimationTarget target) {
-        return new BackMotionEvent(mInitTouchX, mInitTouchY, 0, mSwipeEdge, target);
+        return new BackMotionEvent(
+                /* touchX = */ mInitTouchX,
+                /* touchY = */ mInitTouchY,
+                /* progress = */ 0,
+                /* velocityX = */ 0,
+                /* velocityY = */ 0,
+                /* swipeEdge = */ mSwipeEdge,
+                /* departingAnimationTarget = */ target);
     }
 
     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(mLatestTouchX, mLatestTouchY, progress, mSwipeEdge, null);
+        return new BackMotionEvent(
+                /* touchX = */ mLatestTouchX,
+                /* touchY = */ mLatestTouchY,
+                /* progress = */ progress,
+                /* velocityX = */ mLatestVelocityX,
+                /* velocityY = */ mLatestVelocityY,
+                /* swipeEdge = */ mSwipeEdge,
+                /* departingAnimationTarget = */ null);
     }
 
     public void setProgressThreshold(float progressThreshold) {
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..f8f8897 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;
@@ -1068,6 +1068,7 @@
                     // We need to be Z ordered on top in order for alpha animations to work.
                     mExpandedBubble.getExpandedView().setSurfaceZOrderedOnTop(true);
                     mExpandedBubble.getExpandedView().setAnimating(true);
+                    mExpandedViewContainer.setVisibility(VISIBLE);
                 }
             }
 
@@ -1217,8 +1218,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 +2891,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);
@@ -2920,14 +2923,15 @@
         final float targetX = isLtr
                 ? mTempRect.left - margin
                 : mTempRect.right + margin - mManageMenu.getWidth();
-        final float targetY = mTempRect.bottom - mManageMenu.getHeight();
+        final float menuHeight = getVisibleManageMenuHeight();
+        final float targetY = mTempRect.bottom - menuHeight;
 
         final float xOffsetForAnimation = (isLtr ? 1 : -1) * mManageMenu.getWidth() / 4f;
         if (show) {
             mManageMenu.setScaleX(0.5f);
             mManageMenu.setScaleY(0.5f);
             mManageMenu.setTranslationX(targetX - xOffsetForAnimation);
-            mManageMenu.setTranslationY(targetY + mManageMenu.getHeight() / 4f);
+            mManageMenu.setTranslationY(targetY + menuHeight / 4f);
             mManageMenu.setAlpha(0f);
 
             PhysicsAnimator.getInstance(mManageMenu)
@@ -2953,7 +2957,7 @@
                     .spring(DynamicAnimation.SCALE_X, 0.5f)
                     .spring(DynamicAnimation.SCALE_Y, 0.5f)
                     .spring(DynamicAnimation.TRANSLATION_X, targetX - xOffsetForAnimation)
-                    .spring(DynamicAnimation.TRANSLATION_Y, targetY + mManageMenu.getHeight() / 4f)
+                    .spring(DynamicAnimation.TRANSLATION_Y, targetY + menuHeight / 4f)
                     .withEndActions(() -> {
                         mManageMenu.setVisibility(View.INVISIBLE);
                         if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
@@ -2966,6 +2970,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
      */
@@ -3104,7 +3117,7 @@
                     mAnimatingOutBubbleBuffer.getColorSpace());
 
             mAnimatingOutSurfaceView.setAlpha(1f);
-            mExpandedViewContainer.setVisibility(View.GONE);
+            mExpandedViewContainer.setVisibility(View.INVISIBLE);
 
             mSurfaceSynchronizer.syncSurfaceAndRun(() -> {
                 post(() -> {
@@ -3134,9 +3147,6 @@
         int[] paddings = mPositioner.getExpandedViewContainerPadding(
                 mStackAnimationController.isStackOnLeftSide(), isOverflowExpanded);
         mExpandedViewContainer.setPadding(paddings[0], paddings[1], paddings[2], paddings[3]);
-        if (mIsExpansionAnimating) {
-            mExpandedViewContainer.setVisibility(mIsExpanded ? VISIBLE : GONE);
-        }
         if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
             PointF p = mPositioner.getExpandedBubbleXY(getBubbleIndex(mExpandedBubble),
                     getState());
@@ -3261,6 +3271,24 @@
     }
 
     /**
+     * Menu height calculated for animation
+     * It takes into account view visibility to get the correct total height
+     */
+    private float getVisibleManageMenuHeight() {
+        float menuHeight = 0;
+
+        for (int i = 0; i < mManageMenu.getChildCount(); i++) {
+            View subview = mManageMenu.getChildAt(i);
+
+            if (subview.getVisibility() == VISIBLE) {
+                menuHeight += subview.getHeight();
+            }
+        }
+
+        return menuHeight;
+    }
+
+    /**
      * @return the normalized x-axis position of the bubble stack rounded to 4 decimal places.
      */
     public float getNormalizedXPosition() {
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/compatui/CompatUIWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java
index 170c0ee..6592292 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java
@@ -20,6 +20,7 @@
 import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
 import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
 import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
+import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -46,11 +47,6 @@
  */
 class CompatUIWindowManager extends CompatUIWindowManagerAbstract {
 
-    /**
-     * The Compat UI should be below the Letterbox Education.
-     */
-    private static final int Z_ORDER = LetterboxEduWindowManager.Z_ORDER - 1;
-
     private final CompatUICallback mCallback;
 
     private final CompatUIConfiguration mCompatUIConfiguration;
@@ -92,7 +88,7 @@
 
     @Override
     protected int getZOrder() {
-        return Z_ORDER;
+        return TASK_CHILD_LAYER_COMPAT_UI + 1;
     }
 
     @Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java
index 0c21c8c..959c50d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java
@@ -17,6 +17,7 @@
 package com.android.wm.shell.compatui;
 
 import static android.provider.Settings.Secure.LAUNCHER_TASKBAR_EDUCATION_SHOWING;
+import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -46,12 +47,6 @@
  */
 class LetterboxEduWindowManager extends CompatUIWindowManagerAbstract {
 
-    /**
-     * The Letterbox Education should be the topmost child of the Task in case there can be more
-     * than one child.
-     */
-    public static final int Z_ORDER = Integer.MAX_VALUE;
-
     private final DialogAnimationController<LetterboxEduDialogLayout> mAnimationController;
 
     private final Transitions mTransitions;
@@ -118,7 +113,7 @@
 
     @Override
     protected int getZOrder() {
-        return Z_ORDER;
+        return TASK_CHILD_LAYER_COMPAT_UI + 2;
     }
 
     @Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java
index b6e396d..a18ab91 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java
@@ -18,6 +18,7 @@
 
 import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
+import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -41,11 +42,6 @@
  */
 class ReachabilityEduWindowManager extends CompatUIWindowManagerAbstract {
 
-    /**
-     * The Compat UI should be below the Letterbox Education.
-     */
-    private static final int Z_ORDER = LetterboxEduWindowManager.Z_ORDER - 1;
-
     // The time to wait before hiding the education
     private static final long DISAPPEAR_DELAY_MS = 4000L;
 
@@ -102,7 +98,7 @@
 
     @Override
     protected int getZOrder() {
-        return Z_ORDER;
+        return TASK_CHILD_LAYER_COMPAT_UI + 1;
     }
 
     @Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java
index aab123a..51e5141 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java
@@ -17,6 +17,7 @@
 package com.android.wm.shell.compatui;
 
 import static android.provider.Settings.Secure.LAUNCHER_TASKBAR_EDUCATION_SHOWING;
+import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -47,12 +48,6 @@
  */
 class RestartDialogWindowManager extends CompatUIWindowManagerAbstract {
 
-    /**
-     * The restart dialog should be the topmost child of the Task in case there can be more
-     * than one child.
-     */
-    private static final int Z_ORDER = Integer.MAX_VALUE;
-
     private final DialogAnimationController<RestartDialogLayout> mAnimationController;
 
     private final Transitions mTransitions;
@@ -112,7 +107,7 @@
 
     @Override
     protected int getZOrder() {
-        return Z_ORDER;
+        return TASK_CHILD_LAYER_COMPAT_UI + 2;
     }
 
     @Override
@@ -170,10 +165,10 @@
 
         final Rect taskBounds = getTaskBounds();
         final Rect taskStableBounds = getTaskStableBounds();
-
-        marginParams.topMargin = taskStableBounds.top - taskBounds.top + mDialogVerticalMargin;
-        marginParams.bottomMargin =
-                taskBounds.bottom - taskStableBounds.bottom + mDialogVerticalMargin;
+        // only update margins based on taskbar insets
+        marginParams.topMargin = mDialogVerticalMargin;
+        marginParams.bottomMargin = taskBounds.bottom - taskStableBounds.bottom
+                + mDialogVerticalMargin;
         dialogContainer.setLayoutParams(marginParams);
     }
 
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMode.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMode.java
index cbd544c..e732a03 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMode.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMode.java
@@ -16,9 +16,12 @@
 
 package com.android.wm.shell.desktopmode;
 
+import android.graphics.Region;
+
 import com.android.wm.shell.common.annotations.ExternalThread;
 
 import java.util.concurrent.Executor;
+import java.util.function.Consumer;
 
 /**
  * Interface to interact with desktop mode feature in shell.
@@ -32,7 +35,16 @@
      * @param listener the listener to add.
      * @param callbackExecutor the executor to call the listener on.
      */
-    void addListener(DesktopModeTaskRepository.VisibleTasksListener listener,
+    void addVisibleTasksListener(DesktopModeTaskRepository.VisibleTasksListener listener,
             Executor callbackExecutor);
 
+    /**
+     * Adds a consumer to listen for Desktop task corner changes. This is used for gesture
+     * exclusion. The SparseArray contains a list of four corner resize handles mapped to each
+     * desktop task's taskId. The resize handle Rects are stored in the following order:
+     * left-top, left-bottom, right-top, right-bottom.
+     */
+    default void addDesktopGestureExclusionRegionListener(Consumer<Region> listener,
+            Executor callbackExecutor) { }
+
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java
index 2bdbde1..86ea725 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java
@@ -34,6 +34,7 @@
 import android.app.WindowConfiguration;
 import android.content.Context;
 import android.database.ContentObserver;
+import android.graphics.Region;
 import android.net.Uri;
 import android.os.Handler;
 import android.os.IBinder;
@@ -69,6 +70,7 @@
 import java.util.Comparator;
 import java.util.List;
 import java.util.concurrent.Executor;
+import java.util.function.Consumer;
 
 /**
  * Handles windowing changes when desktop mode system setting changes
@@ -149,11 +151,21 @@
      * @param listener the listener to add.
      * @param callbackExecutor the executor to call the listener on.
      */
-    public void addListener(DesktopModeTaskRepository.VisibleTasksListener listener,
+    public void addVisibleTasksListener(DesktopModeTaskRepository.VisibleTasksListener listener,
             Executor callbackExecutor) {
         mDesktopModeTaskRepository.addVisibleTasksListener(listener, callbackExecutor);
     }
 
+    /**
+     * Adds a listener to track changes to corners of desktop mode tasks.
+     * @param listener the listener to add.
+     * @param callbackExecutor the executor to call the listener on.
+     */
+    public void addTaskCornerListener(Consumer<Region> listener,
+            Executor callbackExecutor) {
+        mDesktopModeTaskRepository.setTaskCornerListener(listener, callbackExecutor);
+    }
+
     @VisibleForTesting
     void updateDesktopModeActive(boolean active) {
         ProtoLog.d(WM_SHELL_DESKTOP_MODE, "updateDesktopModeActive: active=%s", active);
@@ -312,6 +324,23 @@
     }
 
     /**
+     * Update corner rects stored for a specific task
+     * @param taskId task to update
+     * @param taskCorners task's new corner handles
+     */
+    public void onTaskCornersChanged(int taskId, Region taskCorners) {
+        mDesktopModeTaskRepository.updateTaskCorners(taskId, taskCorners);
+    }
+
+    /**
+     * Remove corners saved for a task. Likely used due to task closure.
+     * @param taskId task to remove
+     */
+    public void removeCornersForTask(int taskId) {
+        mDesktopModeTaskRepository.removeTaskCorners(taskId);
+    }
+
+    /**
      * Moves a specifc task to the front.
      * @param taskInfo the task to show in front.
      */
@@ -426,10 +455,19 @@
     private final class DesktopModeImpl implements DesktopMode {
 
         @Override
-        public void addListener(DesktopModeTaskRepository.VisibleTasksListener listener,
+        public void addVisibleTasksListener(
+                DesktopModeTaskRepository.VisibleTasksListener listener,
                 Executor callbackExecutor) {
             mMainExecutor.execute(() -> {
-                DesktopModeController.this.addListener(listener, callbackExecutor);
+                DesktopModeController.this.addVisibleTasksListener(listener, callbackExecutor);
+            });
+        }
+
+        @Override
+        public void addDesktopGestureExclusionRegionListener(Consumer<Region> listener,
+                Executor callbackExecutor) {
+            mMainExecutor.execute(() -> {
+                DesktopModeController.this.addTaskCornerListener(listener, callbackExecutor);
             });
         }
     }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
index 47342c9..12f8ea2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
@@ -16,9 +16,13 @@
 
 package com.android.wm.shell.desktopmode
 
+import android.graphics.Region
 import android.util.ArrayMap
 import android.util.ArraySet
+import android.util.SparseArray
+import androidx.core.util.valueIterator
 import java.util.concurrent.Executor
+import java.util.function.Consumer
 
 /**
  * Keeps track of task data related to desktop mode.
@@ -38,6 +42,10 @@
     private val activeTasksListeners = ArraySet<ActiveTasksListener>()
     // Track visible tasks separately because a task may be part of the desktop but not visible.
     private val visibleTasksListeners = ArrayMap<VisibleTasksListener, Executor>()
+    // Track corners of desktop tasks, used to determine gesture exclusion
+    private val desktopCorners = SparseArray<Region>()
+    private var desktopGestureExclusionListener: Consumer<Region>? = null
+    private var desktopGestureExclusionExecutor: Executor? = null
 
     /**
      * Add a [ActiveTasksListener] to be notified of updates to active tasks in the repository.
@@ -56,6 +64,28 @@
     }
 
     /**
+     * Add a Consumer which will inform other classes of changes to corners for all Desktop tasks.
+     */
+    fun setTaskCornerListener(cornersListener: Consumer<Region>, executor: Executor) {
+        desktopGestureExclusionListener = cornersListener
+        desktopGestureExclusionExecutor = executor
+        executor.execute {
+            desktopGestureExclusionListener?.accept(calculateDesktopExclusionRegion())
+        }
+    }
+
+    /**
+     * Create a new merged region representative of all corners in all desktop tasks.
+     */
+    private fun calculateDesktopExclusionRegion(): Region {
+        val desktopCornersRegion = Region()
+        desktopCorners.valueIterator().forEach { taskCorners ->
+            desktopCornersRegion.op(taskCorners, Region.Op.UNION)
+        }
+        return desktopCornersRegion
+    }
+
+    /**
      * Remove a previously registered [ActiveTasksListener]
      */
     fun removeActiveTasksListener(activeTasksListener: ActiveTasksListener) {
@@ -167,6 +197,28 @@
     }
 
     /**
+     * Updates the active desktop corners; if desktopCorners has been accepted by
+     * desktopCornersListener, it will be updated in the appropriate classes.
+     */
+    fun updateTaskCorners(taskId: Int, taskCorners: Region) {
+        desktopCorners.put(taskId, taskCorners)
+        desktopGestureExclusionExecutor?.execute {
+            desktopGestureExclusionListener?.accept(calculateDesktopExclusionRegion())
+        }
+    }
+
+    /**
+     * Removes the active desktop corners for the specified task; if desktopCorners has been
+     * accepted by desktopCornersListener, it will be updated in the appropriate classes.
+     */
+    fun removeTaskCorners(taskId: Int) {
+        desktopCorners.delete(taskId)
+        desktopGestureExclusionExecutor?.execute {
+            desktopGestureExclusionListener?.accept(calculateDesktopExclusionRegion())
+        }
+    }
+
+    /**
      * Defines interface for classes that can listen to changes for active tasks in desktop mode.
      */
     interface ActiveTasksListener {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
index 670b24c..0d56023 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
@@ -25,7 +25,9 @@
 import android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED
 import android.app.WindowConfiguration.WindowingMode
 import android.content.Context
+import android.graphics.Point
 import android.graphics.Rect
+import android.graphics.Region
 import android.os.IBinder
 import android.os.SystemProperties
 import android.view.SurfaceControl
@@ -193,6 +195,21 @@
         }
     }
 
+
+    /**
+     * Move a task to fullscreen after being dragged from fullscreen and released back into
+     * status bar area
+     */
+    fun cancelMoveToFreeform(task: RunningTaskInfo, startPosition: Point) {
+        val wct = WindowContainerTransaction()
+        addMoveToFullscreenChanges(wct, task.token)
+        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
+            enterDesktopTaskTransitionHandler.startCancelMoveToDesktopMode(wct, startPosition)
+        } else {
+            shellTaskOrganizer.applyTransaction(wct)
+        }
+    }
+
     fun moveToFullscreenWithAnimation(task: ActivityManager.RunningTaskInfo) {
         val wct = WindowContainerTransaction()
         addMoveToFullscreenChanges(wct, task.token)
@@ -471,6 +488,20 @@
         return 2 * getStatusBarHeight(taskInfo)
     }
 
+    /**
+     * Update the corner region for a specified task
+     */
+    fun onTaskCornersChanged(taskId: Int, corner: Region) {
+        desktopModeTaskRepository.updateTaskCorners(taskId, corner)
+    }
+
+    /**
+     * Remove a previously tracked corner region for a specified task.
+     */
+    fun removeCornersForTask(taskId: Int) {
+        desktopModeTaskRepository.removeTaskCorners(taskId)
+    }
+
 
     /**
      * Adds a listener to find out about changes in the visibility of freeform tasks.
@@ -478,20 +509,47 @@
      * @param listener the listener to add.
      * @param callbackExecutor the executor to call the listener on.
      */
-    fun addListener(listener: VisibleTasksListener, callbackExecutor: Executor) {
+    fun addVisibleTasksListener(listener: VisibleTasksListener, callbackExecutor: Executor) {
         desktopModeTaskRepository.addVisibleTasksListener(listener, callbackExecutor)
     }
 
+    /**
+     * Adds a listener to track changes to desktop task corners
+     *
+     * @param listener the listener to add.
+     * @param callbackExecutor the executor to call the listener on.
+     */
+    fun setTaskCornerListener(
+            listener: Consumer<Region>,
+            callbackExecutor: Executor
+    ) {
+        desktopModeTaskRepository.setTaskCornerListener(listener, callbackExecutor)
+    }
+
     /** The interface for calls from outside the shell, within the host process. */
     @ExternalThread
     private inner class DesktopModeImpl : DesktopMode {
-        override fun addListener(listener: VisibleTasksListener, callbackExecutor: Executor) {
+        override fun addVisibleTasksListener(
+                listener: VisibleTasksListener,
+                callbackExecutor: Executor
+        ) {
             mainExecutor.execute {
-                this@DesktopTasksController.addListener(listener, callbackExecutor)
+                this@DesktopTasksController.addVisibleTasksListener(listener, callbackExecutor)
+            }
+        }
+
+        override fun addDesktopGestureExclusionRegionListener(
+                listener: Consumer<Region>,
+                callbackExecutor: Executor
+        ) {
+            mainExecutor.execute {
+                this@DesktopTasksController.setTaskCornerListener(listener, callbackExecutor)
             }
         }
     }
 
+
+
     /** The interface for calls from outside the host process. */
     @BinderThread
     private class IDesktopModeImpl(private var controller: DesktopTasksController?) :
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
index 3df2340..27eda16 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
@@ -17,11 +17,13 @@
 package com.android.wm.shell.desktopmode;
 
 import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ValueAnimator;
 import android.app.ActivityManager;
+import android.graphics.Point;
 import android.graphics.Rect;
 import android.os.IBinder;
 import android.view.SurfaceControl;
@@ -55,6 +57,7 @@
     public static final int FREEFORM_ANIMATION_DURATION = 336;
 
     private final List<IBinder> mPendingTransitionTokens = new ArrayList<>();
+    private Point mStartPosition;
 
     public EnterDesktopTaskTransitionHandler(
             Transitions transitions) {
@@ -79,6 +82,17 @@
         mPendingTransitionTokens.add(token);
     }
 
+    /**
+     * Starts Transition of type TRANSIT_CANCEL_ENTERING_DESKTOP_MODE
+     * @param wct WindowContainerTransaction for transition
+     * @param startPosition Position of task when transition is triggered
+     */
+    public void startCancelMoveToDesktopMode(@NonNull WindowContainerTransaction wct,
+            Point startPosition) {
+        mStartPosition = startPosition;
+        startTransition(Transitions.TRANSIT_CANCEL_ENTERING_DESKTOP_MODE, wct);
+    }
+
     @Override
     public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
             @NonNull SurfaceControl.Transaction startT,
@@ -173,6 +187,37 @@
             return true;
         }
 
+        if (type == Transitions.TRANSIT_CANCEL_ENTERING_DESKTOP_MODE
+                && taskInfo.getWindowingMode() == WINDOWING_MODE_FULLSCREEN
+                && mStartPosition != null) {
+            // This Transition animates a task to fullscreen after being dragged from the status
+            // bar and then released back into the status bar area
+            final SurfaceControl sc = change.getLeash();
+            startT.setWindowCrop(sc, null);
+            startT.apply();
+
+            final ValueAnimator animator = new ValueAnimator();
+            animator.setFloatValues(DRAG_FREEFORM_SCALE, 1f);
+            animator.setDuration(FREEFORM_ANIMATION_DURATION);
+            final SurfaceControl.Transaction t = mTransactionSupplier.get();
+            animator.addUpdateListener(animation -> {
+                final float scale = animation.getAnimatedFraction();
+                t.setPosition(sc, mStartPosition.x * (1 - scale),
+                        mStartPosition.y * (1 - scale));
+                t.setScale(sc, scale, scale);
+                t.apply();
+            });
+            animator.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    mTransitions.getMainExecutor().execute(
+                            () -> finishCallback.onTransitionFinished(null, null));
+                }
+            });
+            animator.start();
+            return true;
+        }
+
         return false;
     }
 
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
index 8c98c77..1d7e649 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
@@ -300,7 +300,7 @@
          * @return true if handled by the handler, false otherwise.
          */
         public boolean handlePipTransaction(SurfaceControl leash, SurfaceControl.Transaction tx,
-                Rect destinationBounds) {
+                Rect destinationBounds, float alpha) {
             return false;
         }
     }
@@ -401,9 +401,10 @@
         }
 
         boolean handlePipTransaction(SurfaceControl leash, SurfaceControl.Transaction tx,
-                Rect destinationBounds) {
+                Rect destinationBounds, float alpha) {
             if (mPipTransactionHandler != null) {
-                return mPipTransactionHandler.handlePipTransaction(leash, tx, destinationBounds);
+                return mPipTransactionHandler.handlePipTransaction(
+                        leash, tx, destinationBounds, alpha);
             }
             return false;
         }
@@ -548,7 +549,9 @@
                     getSurfaceTransactionHelper().alpha(tx, leash, alpha)
                             .round(tx, leash, shouldApplyCornerRadius())
                             .shadow(tx, leash, shouldApplyShadowRadius());
-                    tx.apply();
+                    if (!handlePipTransaction(leash, tx, destinationBounds, alpha)) {
+                        tx.apply();
+                    }
                 }
 
                 @Override
@@ -663,7 +666,7 @@
                                     .shadow(tx, leash, shouldApplyShadowRadius());
                         }
                     }
-                    if (!handlePipTransaction(leash, tx, bounds)) {
+                    if (!handlePipTransaction(leash, tx, bounds, /* alpha= */ 1f)) {
                         tx.apply();
                     }
                 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMenuController.java
index 0006244..0775f52 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMenuController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMenuController.java
@@ -45,6 +45,13 @@
     String MENU_WINDOW_TITLE = "PipMenuView";
 
     /**
+     * Used with
+     * {@link PipMenuController#movePipMenu(SurfaceControl, SurfaceControl.Transaction, Rect,
+     * float)} to indicate that we don't want to affect the alpha value of the menu surfaces.
+     */
+    float ALPHA_NO_CHANGE = -1f;
+
+    /**
      * Called when
      * {@link PipTaskOrganizer#onTaskAppeared(RunningTaskInfo, SurfaceControl)}
      * is called.
@@ -85,8 +92,8 @@
      * need to synchronize the movements on the same frame as PiP.
      */
     default void movePipMenu(@Nullable SurfaceControl pipLeash,
-            @Nullable SurfaceControl.Transaction t,
-            Rect destinationBounds) {}
+            @Nullable SurfaceControl.Transaction t, Rect destinationBounds, float alpha) {
+    }
 
     /**
      * Update the PiP menu with the given bounds for re-layout purposes.
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 5670fe6..566c130 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() {
@@ -249,7 +253,7 @@
         }, null);
     }
 
-    private boolean shouldSyncPipTransactionWithMenu() {
+    protected boolean shouldSyncPipTransactionWithMenu() {
         return mPipMenuController.isMenuVisible();
     }
 
@@ -277,9 +281,9 @@
             new PipAnimationController.PipTransactionHandler() {
                 @Override
                 public boolean handlePipTransaction(SurfaceControl leash,
-                        SurfaceControl.Transaction tx, Rect destinationBounds) {
+                        SurfaceControl.Transaction tx, Rect destinationBounds, float alpha) {
                     if (shouldSyncPipTransactionWithMenu()) {
-                        mPipMenuController.movePipMenu(leash, tx, destinationBounds);
+                        mPipMenuController.movePipMenu(leash, tx, destinationBounds, alpha);
                         return true;
                     }
                     return false;
@@ -381,6 +385,10 @@
         return mPipTransitionController;
     }
 
+    PipAnimationController.PipTransactionHandler getPipTransactionHandler() {
+        return mPipTransactionHandler;
+    }
+
     public Rect getCurrentOrAnimatingBounds() {
         PipAnimationController.PipTransitionAnimator animator =
                 mPipAnimationController.getCurrentAnimator();
@@ -615,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;
         }
 
@@ -712,15 +720,16 @@
             return;
         }
 
+        final int animationType = shouldAlwaysFadeIn()
+                ? ANIM_TYPE_ALPHA
+                : mPipAnimationController.takeOneShotEnterAnimationType();
         if (Transitions.ENABLE_SHELL_TRANSITIONS) {
+            mPipTransitionController.setEnterAnimationType(animationType);
             // For Shell transition, we will animate the window in PipTransition#startAnimation
             // instead of #onTaskAppeared.
             return;
         }
 
-        final int animationType = shouldAlwaysFadeIn()
-                ? ANIM_TYPE_ALPHA
-                : mPipAnimationController.takeOneShotEnterAnimationType();
         if (mWaitForFixedRotation) {
             onTaskAppearedWithFixedRotation(animationType);
             return;
@@ -1002,6 +1011,7 @@
             return;
         }
         if (Transitions.ENABLE_SHELL_TRANSITIONS) {
+            mPipTransitionController.onFixedRotationFinished();
             clearWaitForFixedRotation();
             return;
         }
@@ -1385,7 +1395,7 @@
                 .scale(tx, mLeash, startBounds, toBounds, degrees)
                 .round(tx, mLeash, startBounds, toBounds);
         if (shouldSyncPipTransactionWithMenu()) {
-            mPipMenuController.movePipMenu(mLeash, tx, toBounds);
+            mPipMenuController.movePipMenu(mLeash, tx, toBounds, PipMenuController.ALPHA_NO_CHANGE);
         } else {
             tx.apply();
         }
@@ -1522,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);
@@ -1551,7 +1564,8 @@
         if (!isInPip()) {
             return;
         }
-        mPipMenuController.movePipMenu(null, null, destinationBounds);
+        mPipMenuController.movePipMenu(null, null, destinationBounds,
+                PipMenuController.ALPHA_NO_CHANGE);
         mPipMenuController.updateMenuBounds(destinationBounds);
     }
 
@@ -1600,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);
         }
@@ -1672,8 +1690,17 @@
             // Similar to auto-enter-pip transition, we use content overlay when there is no
             // source rect hint to enter PiP use bounds animation.
             if (sourceHintRect == null) {
+                // We use content overlay when there is no source rect hint to enter PiP use bounds
+                // animation.
+                // TODO(b/272819817): cleanup the null-check and extra logging.
+                final boolean hasTopActivityInfo = mTaskInfo.topActivityInfo != null;
+                if (!hasTopActivityInfo) {
+                    ProtoLog.w(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
+                            "%s: TaskInfo.topActivityInfo is null", TAG);
+                }
                 if (SystemProperties.getBoolean(
-                        "persist.wm.debug.enable_pip_app_icon_overlay", true)) {
+                        "persist.wm.debug.enable_pip_app_icon_overlay", true)
+                        && hasTopActivityInfo) {
                     animator.setAppIconContentOverlay(
                             mContext, currentBounds, mTaskInfo.topActivityInfo,
                             mPipBoundsState.getLauncherState().getAppIconSizePx());
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 b743140..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
@@ -274,9 +274,6 @@
         if (!requestHasPipEnter(request)) {
             throw new IllegalStateException("Called PiP augmentRequest when request has no PiP");
         }
-        mEnterAnimationType = mPipOrganizer.shouldAlwaysFadeIn()
-                ? ANIM_TYPE_ALPHA
-                : mPipAnimationController.takeOneShotEnterAnimationType();
         if (mEnterAnimationType == ANIM_TYPE_ALPHA) {
             mRequestedEnterTransition = transition;
             mRequestedEnterTask = request.getTriggerTask().token;
@@ -412,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 */);
         }
@@ -614,6 +633,7 @@
                         0 /* startingAngle */, rotationDelta);
         animator.setTransitionDirection(TRANSITION_DIRECTION_LEAVE_PIP)
                 .setPipAnimationCallback(mPipAnimationCallback)
+                .setPipTransactionHandler(mPipOrganizer.getPipTransactionHandler())
                 .setDuration(mEnterExitAnimationDuration)
                 .start();
     }
@@ -665,6 +685,11 @@
         return false;
     }
 
+    @Override
+    public void setEnterAnimationType(@PipAnimationController.AnimationType int type) {
+        mEnterAnimationType = type;
+    }
+
     private void startEnterAnimation(@NonNull TransitionInfo info,
             @NonNull SurfaceControl.Transaction startTransaction,
             @NonNull SurfaceControl.Transaction finishTransaction,
@@ -786,8 +811,6 @@
 
         final int enterAnimationType = mEnterAnimationType;
         if (enterAnimationType == ANIM_TYPE_ALPHA) {
-            // Restore to default type.
-            mEnterAnimationType = ANIM_TYPE_BOUNDS;
             startTransaction.setAlpha(leash, 0f);
         }
         startTransaction.apply();
@@ -823,6 +846,7 @@
             throw new RuntimeException("Unrecognized animation type: " + enterAnimationType);
         }
         animator.setTransitionDirection(TRANSITION_DIRECTION_TO_PIP)
+                .setPipTransactionHandler(mPipOrganizer.getPipTransactionHandler())
                 .setPipAnimationCallback(mPipAnimationCallback)
                 .setDuration(mEnterExitAnimationDuration);
         if (rotationDelta != Surface.ROTATION_0 && mInFixedRotation) {
@@ -949,7 +973,8 @@
     }
 
     private void finishResizeForMenu(Rect destinationBounds) {
-        mPipMenuController.movePipMenu(null, null, destinationBounds);
+        mPipMenuController.movePipMenu(null, null, destinationBounds,
+                PipMenuController.ALPHA_NO_CHANGE);
         mPipMenuController.updateMenuBounds(destinationBounds);
     }
 }
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 7979ce7..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,
@@ -225,6 +229,10 @@
         throw new IllegalStateException("Request isn't entering PiP");
     }
 
+    /** Sets the type of animation when a PiP task appears. */
+    public void setEnterAnimationType(@PipAnimationController.AnimationType int type) {
+    }
+
     /** Play a transition animation for entering PiP on a specific PiP change. */
     public void startEnterAnimation(@NonNull final TransitionInfo.Change pipChange,
             @NonNull final SurfaceControl.Transaction startTransaction,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java
index 94e593b..e7a1395 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java
@@ -298,7 +298,8 @@
         }
 
         // Sync the menu bounds before showing it in case it is out of sync.
-        movePipMenu(null /* pipLeash */, null /* transaction */, stackBounds);
+        movePipMenu(null /* pipLeash */, null /* transaction */, stackBounds,
+                PipMenuController.ALPHA_NO_CHANGE);
         updateMenuBounds(stackBounds);
 
         mPipMenuView.showMenu(menuState, stackBounds, allowMenuTimeout, willResizeMenu, withDelay,
@@ -311,7 +312,7 @@
     @Override
     public void movePipMenu(@Nullable SurfaceControl pipLeash,
             @Nullable SurfaceControl.Transaction t,
-            Rect destinationBounds) {
+            Rect destinationBounds, float alpha) {
         if (destinationBounds.isEmpty()) {
             return;
         }
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/TvPipActionsProvider.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipActionsProvider.java
index fa62a73..3b44f10 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipActionsProvider.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipActionsProvider.java
@@ -186,16 +186,17 @@
     }
 
     @VisibleForTesting(visibility = PACKAGE)
-    public void onPipExpansionToggled(boolean expanded) {
+    public void updatePipExpansionState(boolean expanded) {
         ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
                 "%s: onPipExpansionToggled, expanded: %b", TAG, expanded);
 
-        mExpandCollapseAction.update(
+        boolean changed = mExpandCollapseAction.update(
                 expanded ? R.string.pip_collapse : R.string.pip_expand,
                 expanded ? R.drawable.pip_ic_collapse : R.drawable.pip_ic_expand);
-
-        notifyActionsChanged(/* added= */ 0, /* updated= */ 1,
-                mActionsList.indexOf(mExpandCollapseAction));
+        if (changed) {
+            notifyActionsChanged(/* added= */ 0, /* updated= */ 1,
+                    mActionsList.indexOf(mExpandCollapseAction));
+        }
     }
 
     List<TvPipAction> getActionsList() {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipController.java
index 2f74fb6..02eeb2a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipController.java
@@ -502,7 +502,7 @@
                 "%s: onPipTransition_Canceled(), state=%s", TAG, stateToName(mState));
         mTvPipMenuController.onPipTransitionFinished(
                 PipAnimationController.isInPipDirection(direction));
-        mTvPipActionsProvider.onPipExpansionToggled(mTvPipBoundsState.isTvPipExpanded());
+        mTvPipActionsProvider.updatePipExpansionState(mTvPipBoundsState.isTvPipExpanded());
     }
 
     @Override
@@ -515,7 +515,7 @@
                 "%s: onPipTransition_Finished(), state=%s, direction=%d",
                 TAG, stateToName(mState), direction);
         mTvPipMenuController.onPipTransitionFinished(enterPipTransition);
-        mTvPipActionsProvider.onPipExpansionToggled(mTvPipBoundsState.isTvPipExpanded());
+        mTvPipActionsProvider.updatePipExpansionState(mTvPipBoundsState.isTvPipExpanded());
     }
 
     private void updateExpansionState() {
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/TvPipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
index b18e21c..b2a189b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
@@ -30,6 +30,7 @@
 import android.view.SurfaceControl;
 import android.view.View;
 import android.view.ViewRootImpl;
+import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
 import android.window.SurfaceSyncGroup;
 
@@ -202,8 +203,10 @@
     }
 
     private void addPipMenuViewToSystemWindows(View v, String title) {
-        mSystemWindows.addView(v, getPipMenuLayoutParams(mContext, title, 0 /* width */,
-                0 /* height */), 0 /* displayId */, SHELL_ROOT_LAYER_PIP);
+        final WindowManager.LayoutParams layoutParams =
+                getPipMenuLayoutParams(mContext, title, 0 /* width */, 0 /* height */);
+        layoutParams.alpha = 0f;
+        mSystemWindows.addView(v, layoutParams, 0 /* displayId */, SHELL_ROOT_LAYER_PIP);
     }
 
     void onPipTransitionFinished(boolean enterTransition) {
@@ -309,9 +312,9 @@
 
     @Override
     public void movePipMenu(SurfaceControl pipLeash, SurfaceControl.Transaction pipTx,
-            Rect pipBounds) {
+            Rect pipBounds, float alpha) {
         ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
-                "%s: movePipMenu: %s", TAG, pipBounds.toShortString());
+                "%s: movePipMenu: %s, alpha %s", TAG, pipBounds.toShortString(), alpha);
 
         if (pipBounds.isEmpty()) {
             if (pipTx == null) {
@@ -333,6 +336,11 @@
         pipTx.setPosition(frontSurface, menuDestBounds.left, menuDestBounds.top);
         pipTx.setPosition(backSurface, menuDestBounds.left, menuDestBounds.top);
 
+        if (alpha != ALPHA_NO_CHANGE) {
+            pipTx.setAlpha(frontSurface, alpha);
+            pipTx.setAlpha(backSurface, alpha);
+        }
+
         // Synchronize drawing the content in the front and back surfaces together with the pip
         // transaction and the position change for the front and back surfaces
         final SurfaceSyncGroup syncGroup = new SurfaceSyncGroup("TvPip");
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/pip/tv/TvPipSystemAction.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipSystemAction.java
index 4b82e4b..f6dabb7 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipSystemAction.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipSystemAction.java
@@ -52,9 +52,14 @@
                 broadcastAction);
     }
 
-    void update(@StringRes int title, @DrawableRes int icon) {
+    /**
+     * @return true if the title and/or icon were changed.
+     */
+    boolean update(@StringRes int title, @DrawableRes int icon) {
+        boolean changed = title != mTitleResource || icon != mIconResource;
         mTitleResource = title;
         mIconResource = icon;
+        return changed;
     }
 
     void populateButton(@NonNull TvWindowMenuActionButton button, Handler mainHandler) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipTaskOrganizer.java
index 0940490..4819f66 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipTaskOrganizer.java
@@ -98,4 +98,11 @@
     protected boolean shouldAlwaysFadeIn() {
         return true;
     }
+
+    @Override
+    protected boolean shouldSyncPipTransactionWithMenu() {
+        // We always have a menu visible and want to sync the pip transaction with the menu, even
+        // when the menu alpha is 0 (e.g. when a fade-in animation starts).
+        return true;
+    }
 }
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..eb4d2a1 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
@@ -36,6 +36,7 @@
 import android.os.RemoteException;
 import android.util.ArrayMap;
 import android.util.Slog;
+import android.view.Display;
 import android.view.IRecentsAnimationController;
 import android.view.IRecentsAnimationRunner;
 import android.view.RemoteAnimationTarget;
@@ -47,7 +48,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 +99,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 +122,7 @@
             mixer.setRecentsTransition(transition);
         }
         if (transition == null) {
-            controller.cancel();
+            controller.cancel("startRecentsTransition");
             return;
         }
         controller.setTransition(transition);
@@ -127,6 +133,7 @@
     public WindowContainerTransaction handleRequest(IBinder transition,
             TransitionRequestInfo request) {
         // do not directly handle requests. Only entry point should be via startRecentsTransition
+        // TODO: Only log an error if the transition is a recents transition
         return null;
     }
 
@@ -143,11 +150,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 +171,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 +183,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;
@@ -196,6 +220,7 @@
         private int mRecentsTaskId = -1;
         private TransitionInfo mInfo = null;
         private boolean mOpeningSeparateHome = false;
+        private boolean mPausingSeparateHome = false;
         private ArrayMap<SurfaceControl, SurfaceControl> mLeashMap = null;
         private PictureInPictureSurfaceTransaction mPipTransaction = null;
         private IBinder mTransition = null;
@@ -212,40 +237,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 +306,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 +318,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 +343,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,9 +404,15 @@
                             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));
+                        if (taskInfo.topActivityType == ACTIVITY_TYPE_HOME) {
+                            // This can only happen if we have a separate recents/home (3p launcher)
+                            mPausingSeparateHome = true;
+                        }
                         if (taskInfo.pictureInPictureParams != null
                                 && taskInfo.pictureInPictureParams.isAutoEnterEnabled()) {
                             mPipTask = taskInfo.token;
@@ -377,19 +424,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 +449,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 +480,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 +511,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 +555,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 +575,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 +591,10 @@
                         final int rootIdx = TransitionUtil.rootIndexFor(change, mInfo);
                         t.reparent(appearedTargets[i].leash, mInfo.getRoot(rootIdx).getLeash());
                         t.setLayer(appearedTargets[i].leash, layer);
+                        // Hide the animation leash, let listener show it.
+                        t.hide(appearedTargets[i].leash);
+                        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+                                "  opening new taskId=%d", appearedTargets[i].taskId);
                         mOpeningTasks.add(new TaskState(change, appearedTargets[i].leash));
                     }
                 }
@@ -540,20 +608,28 @@
                 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 {
-                mListener.onTasksAppeared(appearedTargets);
-            } catch (RemoteException e) {
-                Slog.e(TAG, "Error sending appeared tasks to recents animation", e);
+            if (appearedTargets != null) {
+                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 +648,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,13 +660,23 @@
         @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;
+                }
+                final int displayId = mInfo.getRootCount() > 0 ? mInfo.getRoot(0).getDisplayId()
+                        : Display.DEFAULT_DISPLAY;
                 // 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 {
-                    ActivityTaskManager.getService().setFocusedTask(mRecentsTaskId);
+                    ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+                            "[%d] RecentsController.setInputConsumerEnabled: set focus to recents",
+                            mInstanceId);
+                    ActivityTaskManager.getService().focusTopTask(displayId);
                 } catch (RemoteException e) {
                     Slog.e(TAG, "Failed to set focused task", e);
                 }
@@ -602,6 +690,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 +710,10 @@
                 Slog.e(TAG, "Duplicate call to finish");
                 return;
             }
+            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+                    "[%d] RecentsController.finishInner: toHome=%b userLeave=%b "
+                            + "willFinishToHome=%b state=%d",
+                    mInstanceId, toHome, sendUserLeaveHint, mWillFinishToHome, mState);
             final Transitions.TransitionFinishCallback finishCB = mFinishCB;
             mFinishCB = null;
 
@@ -629,7 +724,19 @@
                 if (toHome) wct.reorder(mRecentsTask, true /* toTop */);
                 else wct.restoreTransientOrder(mRecentsTask);
             }
-            if (!toHome && !mWillFinishToHome && mPausingTasks != null && mState == STATE_NORMAL) {
+            if (!toHome
+                    // If a recents gesture starts on the 3p launcher, then the 3p launcher is the
+                    // live tile (pausing app). If the gesture is "cancelled" we need to return to
+                    // 3p launcher instead of "task-switching" away from it.
+                    && (!mWillFinishToHome || mPausingSeparateHome)
+                    && mPausingTasks != null && mState == STATE_NORMAL) {
+                if (mPausingSeparateHome) {
+                    ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+                            "  returning to 3p home");
+                } else {
+                    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 +749,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 +768,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 +825,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/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
index 2cd16be..498f95c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
@@ -541,6 +541,34 @@
                 instanceId);
     }
 
+    void startShortcutAndTask(ShortcutInfo shortcutInfo, @Nullable Bundle options1,
+            int taskId, @Nullable Bundle options2, @SplitPosition int splitPosition,
+            float splitRatio, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
+        if (options1 == null) options1 = new Bundle();
+        final ActivityOptions activityOptions = ActivityOptions.fromBundle(options1);
+        final String packageName1 = shortcutInfo.getPackage();
+        // NOTE: This doesn't correctly pull out packageName2 if taskId is referring to a task in
+        //       recents that hasn't launched and is not being organized
+        final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer);
+        if (samePackage(packageName1, packageName2)) {
+            if (supportMultiInstancesSplit(packageName1)) {
+                activityOptions.setApplyMultipleTaskFlagForShortcut(true);
+                ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK");
+            } else {
+                if (mRecentTasksOptional.isPresent()) {
+                    mRecentTasksOptional.get().removeSplitPair(taskId);
+                }
+                taskId = INVALID_TASK_ID;
+                ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN,
+                        "Cancel entering split as not supporting multi-instances");
+                Toast.makeText(mContext, R.string.dock_multi_instances_not_supported_text,
+                        Toast.LENGTH_SHORT).show();
+            }
+        }
+        mStageCoordinator.startShortcutAndTask(shortcutInfo, options1, taskId, options2,
+                splitPosition, splitRatio, remoteTransition, instanceId);
+    }
+
     /**
      * See {@link #startIntent(PendingIntent, Intent, int, Bundle)}
      * @param instanceId to be used by {@link SplitscreenEventLogger}
@@ -580,6 +608,8 @@
             float splitRatio, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
         Intent fillInIntent = null;
         final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent);
+        // NOTE: This doesn't correctly pull out packageName2 if taskId is referring to a task in
+        //       recents that hasn't launched and is not being organized
         final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer);
         if (samePackage(packageName1, packageName2)) {
             if (supportMultiInstancesSplit(packageName1)) {
@@ -587,6 +617,10 @@
                 fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
                 ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK");
             } else {
+                if (mRecentTasksOptional.isPresent()) {
+                    mRecentTasksOptional.get().removeSplitPair(taskId);
+                }
+                taskId = INVALID_TASK_ID;
                 ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN,
                         "Cancel entering split as not supporting multi-instances");
                 Toast.makeText(mContext, R.string.dock_multi_instances_not_supported_text,
@@ -1075,9 +1109,8 @@
                 float splitRatio, @Nullable RemoteTransition remoteTransition,
                 InstanceId instanceId) {
             executeRemoteCallWithTaskPermission(mController, "startShortcutAndTask",
-                    (controller) -> controller.mStageCoordinator.startShortcutAndTask(shortcutInfo,
-                            options1, taskId, options2, splitPosition, splitRatio, remoteTransition,
-                            instanceId));
+                    (controller) -> controller.startShortcutAndTask(shortcutInfo, options1, taskId,
+                            options2, splitPosition, splitRatio, remoteTransition, instanceId));
         }
 
         @Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java
index 8b890bb..51b8000 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java
@@ -38,7 +38,6 @@
 import android.animation.ValueAnimator;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.graphics.Point;
 import android.graphics.Rect;
 import android.os.IBinder;
 import android.view.SurfaceControl;
@@ -139,20 +138,13 @@
                     t.setAlpha(parentChange.getLeash(), 1.f);
                     // and then animate this layer outside the parent (since, for example, this is
                     // the home task animating from fullscreen to part-screen).
-                    t.reparent(leash, info.getRoot(rootIdx).getLeash());
-                    t.setLayer(leash, info.getChanges().size() - i);
+                    t.reparent(parentChange.getLeash(), info.getRoot(rootIdx).getLeash());
+                    t.setLayer(parentChange.getLeash(), info.getChanges().size() - i);
                     // build the finish reparent/reposition
                     mFinishTransaction.reparent(leash, parentChange.getLeash());
                     mFinishTransaction.setPosition(leash,
                             change.getEndRelOffset().x, change.getEndRelOffset().y);
                 }
-                // TODO(shell-transitions): screenshot here
-                final Rect startBounds = new Rect(change.getStartAbsBounds());
-                final Rect endBounds = new Rect(change.getEndAbsBounds());
-                final Point rootOffset = info.getRoot(rootIdx).getOffset();
-                startBounds.offset(-rootOffset.x, -rootOffset.y);
-                endBounds.offset(-rootOffset.x, -rootOffset.y);
-                startExampleResizeAnimation(leash, startBounds, endBounds);
             }
             boolean isRootOrSplitSideRoot = change.getParent() == null
                     || topRoot.equals(change.getParent());
@@ -289,6 +281,12 @@
         return null;
     }
 
+    void startFullscreenTransition(WindowContainerTransaction wct,
+            @Nullable RemoteTransition handler) {
+        mTransitions.startTransition(TRANSIT_OPEN, wct,
+                new OneShotRemoteHandler(mTransitions.getMainExecutor(), handler));
+    }
+
 
     /** Starts a transition to enter split with a remote transition animator. */
     IBinder startEnterTransition(
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
index ce5a2af6..ceef373 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
@@ -89,6 +89,9 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.IntArray;
 import android.util.Log;
 import android.util.Slog;
 import android.view.Choreographer;
@@ -612,6 +615,19 @@
             @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio,
             @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
         final WindowContainerTransaction wct = new WindowContainerTransaction();
+        if (taskId2 == INVALID_TASK_ID) {
+            if (mMainStage.containsTask(taskId1) || mSideStage.containsTask(taskId1)) {
+                prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, wct);
+            }
+            if (mRecentTasks.isPresent()) {
+                mRecentTasks.get().removeSplitPair(taskId1);
+            }
+            options1 = options1 != null ? options1 : new Bundle();
+            wct.startTask(taskId1, options1);
+            mSplitTransitions.startFullscreenTransition(wct, remoteTransition);
+            return;
+        }
+
         prepareEvictChildTasksIfSplitActive(wct);
         setSideStagePosition(splitPosition, wct);
         options1 = options1 != null ? options1 : new Bundle();
@@ -627,6 +643,13 @@
             @SplitPosition int splitPosition, float splitRatio,
             @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
         final WindowContainerTransaction wct = new WindowContainerTransaction();
+        if (taskId == INVALID_TASK_ID) {
+            options1 = options1 != null ? options1 : new Bundle();
+            wct.sendPendingIntent(pendingIntent, fillInIntent, options1);
+            mSplitTransitions.startFullscreenTransition(wct, remoteTransition);
+            return;
+        }
+
         prepareEvictChildTasksIfSplitActive(wct);
         setSideStagePosition(splitPosition, wct);
         options1 = options1 != null ? options1 : new Bundle();
@@ -641,6 +664,13 @@
             int taskId, @Nullable Bundle options2, @SplitPosition int splitPosition,
             float splitRatio, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
         final WindowContainerTransaction wct = new WindowContainerTransaction();
+        if (taskId == INVALID_TASK_ID) {
+            options1 = options1 != null ? options1 : new Bundle();
+            wct.startShortcut(mContext.getPackageName(), shortcutInfo, options1);
+            mSplitTransitions.startFullscreenTransition(wct, remoteTransition);
+            return;
+        }
+
         prepareEvictChildTasksIfSplitActive(wct);
         setSideStagePosition(splitPosition, wct);
         options1 = options1 != null ? options1 : new Bundle();
@@ -689,6 +719,17 @@
             @SplitPosition int splitPosition, float splitRatio,
             @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
         final WindowContainerTransaction wct = new WindowContainerTransaction();
+        if (pendingIntent2 == null) {
+            options1 = options1 != null ? options1 : new Bundle();
+            if (shortcutInfo1 != null) {
+                wct.startShortcut(mContext.getPackageName(), shortcutInfo1, options1);
+            } else {
+                wct.sendPendingIntent(pendingIntent1, fillInIntent1, options1);
+            }
+            mSplitTransitions.startFullscreenTransition(wct, remoteTransition);
+            return;
+        }
+
         if (!mMainStage.isActive()) {
             // Build a request WCT that will launch both apps such that task 0 is on the main stage
             // while task 1 is on the side stage.
@@ -2352,6 +2393,7 @@
             if (!mMainStage.isActive()) return false;
 
             mSplitLayout.setFreezeDividerWindow(false);
+            final StageChangeRecord record = new StageChangeRecord();
             for (int iC = 0; iC < info.getChanges().size(); ++iC) {
                 final TransitionInfo.Change change = info.getChanges().get(iC);
                 if (change.getMode() == TRANSIT_CHANGE
@@ -2367,18 +2409,31 @@
                     if (!stage.containsTask(taskInfo.taskId)) {
                         Log.w(TAG, "Expected onTaskAppeared on " + stage + " to have been called"
                                 + " with " + taskInfo.taskId + " before startAnimation().");
+                        record.addRecord(stage, true, taskInfo.taskId);
                     }
                 } else if (isClosingType(change.getMode())) {
                     if (stage.containsTask(taskInfo.taskId)) {
+                        record.addRecord(stage, false, taskInfo.taskId);
                         Log.w(TAG, "Expected onTaskVanished on " + stage + " to have been called"
                                 + " with " + taskInfo.taskId + " before startAnimation().");
                     }
                 }
             }
-            if (mMainStage.getChildCount() == 0 || mSideStage.getChildCount() == 0) {
-                // TODO(shell-transitions): Implement a fallback behavior for now.
-                throw new IllegalStateException("Somehow removed the last task in a stage"
-                        + " outside of a proper transition");
+            // If the size of dismissStages > 0, the task is closed without prepare pending
+            // transition, which could happen if all activities were finished after finish top
+            // activity in a task, so the trigger task is null when handleRequest.
+            final ArraySet<StageTaskListener> dismissStages = record.getShouldDismissedStage();
+            if (mMainStage.getChildCount() == 0 || mSideStage.getChildCount() == 0
+                    || dismissStages.size() > 0) {
+                Log.e(TAG, "Somehow removed the last task in a stage outside of a proper "
+                        + "transition.");
+                final WindowContainerTransaction wct = new WindowContainerTransaction();
+                final int dismissTop = (dismissStages.size() == 1
+                        && getStageType(dismissStages.valueAt(0)) == STAGE_TYPE_MAIN)
+                        || mMainStage.getChildCount() == 0 ? STAGE_TYPE_SIDE : STAGE_TYPE_MAIN;
+                prepareExitSplitScreen(dismissTop, wct);
+                mSplitTransitions.startDismissTransition(wct, this, dismissTop,
+                        EXIT_REASON_UNKNOWN);
                 // This can happen in some pathological cases. For example:
                 // 1. main has 2 tasks [Task A (Single-task), Task B], side has one task [Task C]
                 // 2. Task B closes itself and starts Task A in LAUNCH_ADJACENT at the same time
@@ -2402,6 +2457,57 @@
                 finishCallback);
     }
 
+    static class StageChangeRecord {
+        static class StageChange {
+            final StageTaskListener mStageTaskListener;
+            final IntArray mAddedTaskId = new IntArray();
+            final IntArray mRemovedTaskId = new IntArray();
+            StageChange(StageTaskListener stage) {
+                mStageTaskListener = stage;
+            }
+
+            boolean shouldDismissStage() {
+                if (mAddedTaskId.size() > 0 || mRemovedTaskId.size() == 0) {
+                    return false;
+                }
+                int removeChildTaskCount = 0;
+                for (int i = mRemovedTaskId.size() - 1; i >= 0; --i) {
+                    if (mStageTaskListener.containsTask(mRemovedTaskId.get(i))) {
+                        ++removeChildTaskCount;
+                    }
+                }
+                return removeChildTaskCount == mStageTaskListener.getChildCount();
+            }
+        }
+        private final ArrayMap<StageTaskListener, StageChange> mChanges = new ArrayMap<>();
+
+        void addRecord(StageTaskListener stage, boolean open, int taskId) {
+            final StageChange next;
+            if (!mChanges.containsKey(stage)) {
+                next = new StageChange(stage);
+                mChanges.put(stage, next);
+            } else {
+                next = mChanges.get(stage);
+            }
+            if (open) {
+                next.mAddedTaskId.add(taskId);
+            } else {
+                next.mRemovedTaskId.add(taskId);
+            }
+        }
+
+        ArraySet<StageTaskListener> getShouldDismissedStage() {
+            final ArraySet<StageTaskListener> dismissTarget = new ArraySet<>();
+            for (int i = mChanges.size() - 1; i >= 0; --i) {
+                final StageChange change = mChanges.valueAt(i);
+                if (change.shouldDismissStage()) {
+                    dismissTarget.add(change.mStageTaskListener);
+                }
+            }
+            return dismissTarget;
+        }
+    }
+
     /** Starts the pending transition animation. */
     public boolean startPendingAnimation(@NonNull IBinder transition,
             @NonNull TransitionInfo info,
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/DefaultTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
index 3dd10a0..6e9ecda 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
@@ -327,6 +327,7 @@
 
         @ColorInt int backgroundColorForTransition = 0;
         final int wallpaperTransit = getWallpaperTransitType(info);
+        boolean isDisplayRotationAnimationStarted = false;
         for (int i = info.getChanges().size() - 1; i >= 0; --i) {
             final TransitionInfo.Change change = info.getChanges().get(i);
             if (change.hasAllFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY
@@ -350,6 +351,7 @@
                     if (!(isSeamlessDisplayChange || anim == ROTATION_ANIMATION_JUMPCUT)) {
                         startRotationAnimation(startTransaction, change, info, anim, animations,
                                 onAnimFinish);
+                        isDisplayRotationAnimationStarted = true;
                         continue;
                     }
                 } else {
@@ -405,6 +407,14 @@
                 }
             }
 
+            // Hide the invisible surface directly without animating it if there is a display
+            // rotation animation playing.
+            if (isDisplayRotationAnimationStarted && TransitionUtil.isClosingType(
+                    change.getMode())) {
+                startTransaction.hide(change.getLeash());
+                continue;
+            }
+
             // The back gesture has animated this change before transition happen, so here we don't
             // play the animation again.
             if (change.hasFlags(FLAG_BACK_GESTURE_ANIMATED)) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
index bcc37ba..0f4645c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
@@ -122,14 +122,14 @@
                     ? R.styleable.WindowAnimation_taskToFrontEnterAnimation
                     : R.styleable.WindowAnimation_taskToFrontExitAnimation;
         } else if (type == TRANSIT_CLOSE) {
-            if (isTask) {
+            if ((changeFlags & FLAG_TRANSLUCENT) != 0 && !enter) {
+                translucent = true;
+            }
+            if (isTask && !translucent) {
                 animAttr = enter
                         ? R.styleable.WindowAnimation_taskCloseEnterAnimation
                         : R.styleable.WindowAnimation_taskCloseExitAnimation;
             } else {
-                if ((changeFlags & FLAG_TRANSLUCENT) != 0 && !enter) {
-                    translucent = true;
-                }
                 animAttr = enter
                         ? R.styleable.WindowAnimation_activityCloseEnterAnimation
                         : R.styleable.WindowAnimation_activityCloseExitAnimation;
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 fa4de16..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";
@@ -143,6 +150,10 @@
     /** Transition type to fullscreen from desktop mode. */
     public static final int TRANSIT_EXIT_DESKTOP_MODE = WindowManager.TRANSIT_FIRST_CUSTOM + 12;
 
+    /** Transition type to animate back to fullscreen when drag to freeform is cancelled. */
+    public static final int TRANSIT_CANCEL_ENTERING_DESKTOP_MODE =
+            WindowManager.TRANSIT_FIRST_CUSTOM + 13;
+
     private final WindowOrganizer mOrganizer;
     private final Context mContext;
     private final ShellExecutor mMainExecutor;
@@ -168,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;
@@ -186,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,
@@ -370,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.
      */
@@ -425,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);
             }
@@ -537,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) {
@@ -549,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)) {
@@ -580,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();
@@ -610,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;
     }
 
     /**
@@ -639,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);
@@ -665,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);
@@ -683,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<>();
         }
@@ -707,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) {
@@ -776,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();
@@ -791,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);
     }
 
     /**
@@ -810,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);
@@ -872,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) {
@@ -958,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.
@@ -966,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 afc573e..8fb56fc 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
@@ -34,7 +34,9 @@
 import android.app.ActivityTaskManager;
 import android.content.Context;
 import android.content.res.Resources;
+import android.graphics.Point;
 import android.graphics.Rect;
+import android.graphics.Region;
 import android.hardware.input.InputManager;
 import android.os.Handler;
 import android.os.IBinder;
@@ -68,6 +70,7 @@
 import com.android.wm.shell.freeform.FreeformTaskTransitionStarter;
 import com.android.wm.shell.splitscreen.SplitScreenController;
 import com.android.wm.shell.transition.Transitions;
+import com.android.wm.shell.windowdecor.DesktopModeWindowDecoration.TaskCornersListener;
 
 import java.util.Optional;
 import java.util.function.Supplier;
@@ -94,9 +97,11 @@
 
     private SparseArray<EventReceiver> mEventReceiversByDisplay = new SparseArray<>();
 
+    private final TaskCornersListener mCornersListener = new TaskCornersListenerImpl();
+
     private final SparseArray<DesktopModeWindowDecoration> mWindowDecorByTaskId =
             new SparseArray<>();
-    private final DragStartListenerImpl mDragStartListener = new DragStartListenerImpl();
+    private final DragListenerImpl mDragStartListener = new DragListenerImpl();
     private final InputMonitorFactory mInputMonitorFactory;
     private TaskOperations mTaskOperations;
     private final Supplier<SurfaceControl.Transaction> mTransactionFactory;
@@ -246,7 +251,7 @@
         if (decoration == null) {
             createWindowDecoration(taskInfo, taskSurface, startT, finishT);
         } else {
-            decoration.relayout(taskInfo, startT, finishT);
+            decoration.relayout(taskInfo, startT, finishT, false /* applyStartTransactionOnDraw */);
         }
     }
 
@@ -258,7 +263,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
@@ -334,7 +339,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));
@@ -557,8 +563,10 @@
                         mDragToDesktopAnimationStarted = false;
                         return;
                     } else if (mDragToDesktopAnimationStarted) {
-                        mDesktopTasksController.ifPresent(c ->
-                                c.moveToFullscreen(relevantDecor.mTaskInfo));
+                        Point startPosition = new Point((int) ev.getX(), (int) ev.getY());
+                        mDesktopTasksController.ifPresent(
+                                c -> c.cancelMoveToFreeform(relevantDecor.mTaskInfo,
+                                        startPosition));
                         mDragToDesktopAnimationStarted = false;
                         return;
                     }
@@ -775,13 +783,15 @@
         final DesktopModeTouchEventListener touchEventListener =
                 new DesktopModeTouchEventListener(taskInfo, taskPositioner);
         windowDecoration.setCaptionListeners(touchEventListener, touchEventListener);
+        windowDecoration.setCornersListener(mCornersListener);
         windowDecoration.setDragPositioningCallback(taskPositioner);
         windowDecoration.setDragDetector(touchEventListener.mDragDetector);
-        windowDecoration.relayout(taskInfo, startT, finishT);
+        windowDecoration.relayout(taskInfo, startT, finishT,
+                false /* applyStartTransactionOnDraw */);
         incrementEventReceiverTasks(taskInfo.displayId);
     }
 
-    private class DragStartListenerImpl implements TaskPositioner.DragStartListener {
+    private class DragListenerImpl implements TaskPositioner.DragStartListener {
         @Override
         public void onDragStart(int taskId) {
             mWindowDecorByTaskId.get(taskId).closeHandleMenu();
@@ -793,6 +803,22 @@
             return inputManager.monitorGestureInput("caption-touch", context.getDisplayId());
         }
     }
+
+    private class TaskCornersListenerImpl
+            implements DesktopModeWindowDecoration.TaskCornersListener {
+
+        @Override
+        public void onTaskCornersChanged(int taskId, Region corner) {
+            mDesktopModeController.ifPresent(d -> d.onTaskCornersChanged(taskId, corner));
+            mDesktopTasksController.ifPresent(d -> d.onTaskCornersChanged(taskId, corner));
+        }
+
+        @Override
+        public void onTaskCornersRemoved(int taskId) {
+            mDesktopModeController.ifPresent(d -> d.removeCornersForTask(taskId));
+            mDesktopTasksController.ifPresent(d -> d.removeCornersForTask(taskId));
+        }
+    }
 }
 
 
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 a004e37..619e963 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
@@ -30,6 +30,7 @@
 import android.content.res.Resources;
 import android.graphics.Point;
 import android.graphics.PointF;
+import android.graphics.Region;
 import android.graphics.drawable.Drawable;
 import android.os.Handler;
 import android.util.Log;
@@ -42,6 +43,7 @@
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.TextView;
+import android.window.SurfaceSyncGroup;
 import android.window.WindowContainerTransaction;
 
 import com.android.launcher3.icons.IconProvider;
@@ -79,6 +81,7 @@
     private final WindowDecoration.RelayoutResult<WindowDecorLinearLayout> mResult =
             new WindowDecoration.RelayoutResult<>();
 
+    private final Point mPositionInParent = new Point();
     private final PointF mHandleMenuAppInfoPillPosition = new PointF();
     private final PointF mHandleMenuWindowingPillPosition = new PointF();
     private final PointF mHandleMenuMoreActionsPillPosition = new PointF();
@@ -91,6 +94,8 @@
     private Drawable mAppIcon;
     private CharSequence mAppName;
 
+    private TaskCornersListener mCornersListener;
+
     private int mMenuWidth;
     private int mMarginMenuTop;
     private int mMarginMenuStart;
@@ -160,6 +165,10 @@
         mOnCaptionTouchListener = onCaptionTouchListener;
     }
 
+    void setCornersListener(TaskCornersListener cornersListener) {
+        mCornersListener = cornersListener;
+    }
+
     void setDragPositioningCallback(DragPositioningCallback dragPositioningCallback) {
         mDragPositioningCallback = dragPositioningCallback;
     }
@@ -172,15 +181,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;
@@ -215,6 +224,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
@@ -276,8 +286,14 @@
                 .getDimensionPixelSize(R.dimen.freeform_resize_handle);
         final int resize_corner = mResult.mRootView.getResources()
                 .getDimensionPixelSize(R.dimen.freeform_resize_corner);
-        mDragResizeListener.setGeometry(
-                mResult.mWidth, mResult.mHeight, resize_handle, resize_corner, touchSlop);
+
+        // If either task geometry or position have changed, update this task's cornersListener
+        if (mDragResizeListener.setGeometry(
+                mResult.mWidth, mResult.mHeight, resize_handle, resize_corner, touchSlop)
+                || !mTaskInfo.positionInParent.equals(mPositionInParent)) {
+            mCornersListener.onTaskCornersChanged(mTaskInfo.taskId, getGlobalCornersRegion());
+        }
+        mPositionInParent.set(mTaskInfo.positionInParent);
     }
 
     boolean isHandleMenuActive() {
@@ -311,51 +327,50 @@
      * Create and display handle menu window
      */
     void createHandleMenu() {
+        final SurfaceSyncGroup ssg = new SurfaceSyncGroup(TAG);
         final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
         updateHandleMenuPillPositions();
 
-        createAppInfoPill(t);
+        createAppInfoPill(t, ssg);
 
         // Only show windowing buttons in proto2. Proto1 uses a system-level mode only.
         final boolean shouldShowWindowingPill = DesktopModeStatus.isProto2Enabled();
         if (shouldShowWindowingPill) {
-            createWindowingPill(t);
+            createWindowingPill(t, ssg);
         }
 
-        createMoreActionsPill(t);
+        createMoreActionsPill(t, ssg);
 
-        mSyncQueue.runInSync(transaction -> {
-            transaction.merge(t);
-            t.close();
-        });
+        ssg.addTransaction(t);
+        ssg.markSyncReady();
         setupHandleMenu(shouldShowWindowingPill);
     }
 
-    private void createAppInfoPill(SurfaceControl.Transaction t) {
+    private void createAppInfoPill(SurfaceControl.Transaction t, SurfaceSyncGroup ssg) {
         final int x = (int) mHandleMenuAppInfoPillPosition.x;
         final int y = (int) mHandleMenuAppInfoPillPosition.y;
         mHandleMenuAppInfoPill = addWindow(
                 R.layout.desktop_mode_window_decor_handle_menu_app_info_pill,
                 "Menu's app info pill",
-                t, x, y, mMenuWidth, mAppInfoPillHeight, mShadowRadius, mCornerRadius);
+                t, ssg, x, y, mMenuWidth, mAppInfoPillHeight, mShadowRadius, mCornerRadius);
     }
 
-    private void createWindowingPill(SurfaceControl.Transaction t) {
+    private void createWindowingPill(SurfaceControl.Transaction t, SurfaceSyncGroup ssg) {
         final int x = (int) mHandleMenuWindowingPillPosition.x;
         final int y = (int) mHandleMenuWindowingPillPosition.y;
         mHandleMenuWindowingPill = addWindow(
                 R.layout.desktop_mode_window_decor_handle_menu_windowing_pill,
                 "Menu's windowing pill",
-                t, x, y, mMenuWidth, mWindowingPillHeight, mShadowRadius, mCornerRadius);
+                t, ssg, x, y, mMenuWidth, mWindowingPillHeight, mShadowRadius, mCornerRadius);
     }
 
-    private void createMoreActionsPill(SurfaceControl.Transaction t) {
+    private void createMoreActionsPill(SurfaceControl.Transaction t, SurfaceSyncGroup ssg) {
         final int x = (int) mHandleMenuMoreActionsPillPosition.x;
         final int y = (int) mHandleMenuMoreActionsPillPosition.y;
         mHandleMenuMoreActionsPill = addWindow(
                 R.layout.desktop_mode_window_decor_handle_menu_more_actions_pill,
                 "Menu's more actions pill",
-                t, x, y, mMenuWidth, mMoreActionsPillHeight, mShadowRadius, mCornerRadius);
+                t, ssg, x, y, mMenuWidth, mMoreActionsPillHeight, mShadowRadius, mCornerRadius);
     }
 
     private void setupHandleMenu(boolean windowingPillShown) {
@@ -585,6 +600,7 @@
     public void close() {
         closeDragResizeListener();
         closeHandleMenu();
+        mCornersListener.onTaskCornersRemoved(mTaskInfo.taskId);
         super.close();
     }
 
@@ -597,6 +613,15 @@
                 : R.layout.desktop_mode_focused_window_decor;
     }
 
+    /**
+     * Create a new region out of the corner rects of this task.
+     */
+    Region getGlobalCornersRegion() {
+        Region cornersRegion = mDragResizeListener.getCornersRegion();
+        cornersRegion.translate(mPositionInParent.x, mPositionInParent.y);
+        return cornersRegion;
+    }
+
     static class Factory {
 
         DesktopModeWindowDecoration create(
@@ -619,4 +644,13 @@
                     syncQueue);
         }
     }
+
+    interface TaskCornersListener {
+        /** Inform the implementing class of this task's change in corner resize handles */
+        void onTaskCornersChanged(int taskId, Region corner);
+
+        /** Inform the implementing class that this task no longer needs its corners tracked,
+         * likely due to it closing. */
+        void onTaskCornersRemoved(int taskId);
+    }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeInputListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeInputListener.java
index d5437c7..34c8c08 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeInputListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeInputListener.java
@@ -134,13 +134,14 @@
      * @param cornerSize The size of the resize handle centered in each corner.
      * @param touchSlop The distance in pixels user has to drag with touch for it to register as
      *                  a resize action.
+     * @return whether the geometry has changed or not
      */
-    void setGeometry(int taskWidth, int taskHeight, int resizeHandleThickness, int cornerSize,
+    boolean setGeometry(int taskWidth, int taskHeight, int resizeHandleThickness, int cornerSize,
             int touchSlop) {
         if (mTaskWidth == taskWidth && mTaskHeight == taskHeight
                 && mResizeHandleThickness == resizeHandleThickness
                 && mCornerSize == cornerSize) {
-            return;
+            return false;
         }
 
         mTaskWidth = taskWidth;
@@ -220,6 +221,19 @@
         } catch (RemoteException e) {
             e.rethrowFromSystemServer();
         }
+        return true;
+    }
+
+    /**
+     * Generate a Region that encapsulates all 4 corner handles
+     */
+    Region getCornersRegion() {
+        Region region = new Region();
+        region.union(mLeftTopCornerBounds);
+        region.union(mLeftBottomCornerBounds);
+        region.union(mRightTopCornerBounds);
+        region.union(mRightBottomCornerBounds);
+        return region;
     }
 
     @Override
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 bc5fd4d..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
@@ -34,6 +34,7 @@
 import android.view.WindowInsets;
 import android.view.WindowManager;
 import android.view.WindowlessWindowManager;
+import android.window.SurfaceSyncGroup;
 import android.window.TaskConstants;
 import android.window.WindowContainerTransaction;
 
@@ -90,7 +91,6 @@
     Display mDisplay;
     Context mDecorWindowContext;
     SurfaceControl mDecorationContainerSurface;
-    SurfaceControl mTaskBackgroundSurface;
 
     SurfaceControl mCaptionContainerSurface;
     private WindowlessWindowManager mCaptionWindowManager;
@@ -192,15 +192,20 @@
             mDecorWindowContext = mContext.createConfigurationContext(taskConfig);
             if (params.mLayoutResId != 0) {
                 outResult.mRootView = (T) LayoutInflater.from(mDecorWindowContext)
-                                .inflate(params.mLayoutResId, null);
+                        .inflate(params.mLayoutResId, null);
             }
         }
 
         if (outResult.mRootView == null) {
             outResult.mRootView = (T) LayoutInflater.from(mDecorWindowContext)
-                            .inflate(params.mLayoutResId , null);
+                    .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();
@@ -215,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();
@@ -259,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.
@@ -282,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);
     }
 
     /**
@@ -343,12 +332,6 @@
             released = true;
         }
 
-        if (mTaskBackgroundSurface != null) {
-            t.remove(mTaskBackgroundSurface);
-            mTaskBackgroundSurface = null;
-            released = true;
-        }
-
         if (released) {
             t.apply();
         }
@@ -382,18 +365,20 @@
     /**
      * Create a window associated with this WindowDecoration.
      * Note that subclass must dispose of this when the task is hidden/closed.
-     * @param layoutId layout to make the window from
-     * @param t the transaction to apply
-     * @param xPos x position of new window
-     * @param yPos y position of new window
-     * @param width width of new window
-     * @param height height of new window
+     *
+     * @param layoutId     layout to make the window from
+     * @param t            the transaction to apply
+     * @param xPos         x position of new window
+     * @param yPos         y position of new window
+     * @param width        width of new window
+     * @param height       height of new window
      * @param shadowRadius radius of the shadow of the new window
      * @param cornerRadius radius of the corners of the new window
      * @return the {@link AdditionalWindow} that was added.
      */
     AdditionalWindow addWindow(int layoutId, String namePrefix, SurfaceControl.Transaction t,
-            int xPos, int yPos, int width, int height, int shadowRadius, int cornerRadius) {
+            SurfaceSyncGroup ssg, int xPos, int yPos, int width, int height, int shadowRadius,
+            int cornerRadius) {
         final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get();
         SurfaceControl windowSurfaceControl = builder
                 .setName(namePrefix + " of Task=" + mTaskInfo.taskId)
@@ -417,12 +402,12 @@
                 windowSurfaceControl, null /* hostInputToken */);
         SurfaceControlViewHost viewHost = mSurfaceControlViewHostFactory
                 .create(mDecorWindowContext, mDisplay, windowManager);
-        viewHost.setView(v, lp);
+        ssg.add(viewHost.getSurfacePackage(), () -> viewHost.setView(v, lp));
         return new AdditionalWindow(windowSurfaceControl, viewHost,
                 mSurfaceControlTransactionSupplier);
     }
 
-    static class RelayoutParams{
+    static class RelayoutParams {
         RunningTaskInfo mRunningTaskInfo;
         int mLayoutResId;
         int mCaptionHeightId;
@@ -432,6 +417,8 @@
         int mCaptionX;
         int mCaptionY;
 
+        boolean mApplyStartTransactionOnDraw;
+
         void reset() {
             mLayoutResId = Resources.ID_NULL;
             mCaptionHeightId = Resources.ID_NULL;
@@ -440,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/AndroidTest.xml b/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml
index 67ca9a1..b6d92814 100644
--- a/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml
+++ b/libs/WindowManager/Shell/tests/flicker/AndroidTest.xml
@@ -29,6 +29,7 @@
         <option name="teardown-command" value="settings delete secure show_ime_with_hard_keyboard" />
         <option name="teardown-command" value="settings delete system show_touches" />
         <option name="teardown-command" value="settings delete system pointer_location" />
+        <option name="teardown-command" value="cmd overlay enable com.android.internal.systemui.navbar.gestural" />
     </target_preparer>
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true"/>
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/activityembedding/ActivityEmbeddingControllerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java
index cbbb291..b8f615a 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java
@@ -16,6 +16,7 @@
 
 package com.android.wm.shell.activityembedding;
 
+import static android.view.WindowManager.TRANSIT_CLOSE;
 import static android.view.WindowManager.TRANSIT_OPEN;
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
@@ -82,10 +83,13 @@
 
     @Test
     public void testStartAnimation_containsNonActivityEmbeddingChange() {
+        final TransitionInfo.Change nonEmbeddedOpen = createChange(0 /* flags */);
+        final TransitionInfo.Change embeddedOpen = createEmbeddedChange(
+                EMBEDDED_LEFT_BOUNDS, EMBEDDED_LEFT_BOUNDS, TASK_BOUNDS);
+        nonEmbeddedOpen.setMode(TRANSIT_OPEN);
         final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_OPEN, 0)
-                .addChange(createEmbeddedChange(
-                        EMBEDDED_LEFT_BOUNDS, EMBEDDED_LEFT_BOUNDS, TASK_BOUNDS))
-                .addChange(createChange(0 /* flags */))
+                .addChange(embeddedOpen)
+                .addChange(nonEmbeddedOpen)
                 .build();
 
         // No-op because it contains non-embedded change.
@@ -95,6 +99,22 @@
         verifyNoMoreInteractions(mStartTransaction);
         verifyNoMoreInteractions(mFinishTransaction);
         verifyNoMoreInteractions(mFinishCallback);
+
+        final TransitionInfo.Change nonEmbeddedClose = createChange(0 /* flags */);
+        nonEmbeddedClose.setMode(TRANSIT_CLOSE);
+        nonEmbeddedClose.setEndAbsBounds(TASK_BOUNDS);
+        final TransitionInfo.Change embeddedOpen2 = createEmbeddedChange(
+                EMBEDDED_RIGHT_BOUNDS, EMBEDDED_RIGHT_BOUNDS, TASK_BOUNDS);
+        final TransitionInfo info2 = new TransitionInfoBuilder(TRANSIT_OPEN, 0)
+                .addChange(embeddedOpen)
+                .addChange(embeddedOpen2)
+                .addChange(nonEmbeddedClose)
+                .build();
+        // Ok to animate because nonEmbeddedClose is occluded by embeddedOpen and embeddedOpen2.
+        assertTrue(mController.startAnimation(mTransition, info2, mStartTransaction,
+                mFinishTransaction, mFinishCallback));
+        // The non-embedded change is dropped to avoid affecting embedded animation.
+        assertFalse(info2.getChanges().contains(nonEmbeddedClose));
     }
 
     @Test
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 0673484..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,10 +514,17 @@
     }
 
     private void doMotionEvent(int actionDown, int coordinate) {
+        doMotionEvent(actionDown, coordinate, 0);
+    }
+
+    private void doMotionEvent(int actionDown, int coordinate, float velocity) {
         mController.onMotionEvent(
-                coordinate, coordinate,
-                actionDown,
-                BackEvent.EDGE_LEFT);
+                /* touchX */ coordinate,
+                /* touchY */ coordinate,
+                /* velocityX = */ velocity,
+                /* velocityY = */ velocity,
+                /* keyAction */ actionDown,
+                /* swipeEdge */ BackEvent.EDGE_LEFT);
     }
 
     private void simulateRemoteAnimationStart(int type) throws RemoteException {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackProgressAnimatorTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackProgressAnimatorTest.java
index 3608474..874ef80 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackProgressAnimatorTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackProgressAnimatorTest.java
@@ -16,8 +16,6 @@
 
 package com.android.wm.shell.back;
 
-import static android.window.BackEvent.EDGE_LEFT;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
@@ -48,12 +46,21 @@
     private CountDownLatch mTargetProgressCalled = new CountDownLatch(1);
     private Handler mMainThreadHandler;
 
+    private BackMotionEvent backMotionEventFrom(float touchX, float progress) {
+        return new BackMotionEvent(
+                /* touchX = */ touchX,
+                /* touchY = */ 0,
+                /* progress = */ progress,
+                /* velocityX = */ 0,
+                /* velocityY = */ 0,
+                /* swipeEdge = */ BackEvent.EDGE_LEFT,
+                /* departingAnimationTarget = */ null);
+    }
+
     @Before
     public void setUp() throws Exception {
         mMainThreadHandler = new Handler(Looper.getMainLooper());
-        final BackMotionEvent backEvent = new BackMotionEvent(
-                0, 0,
-                0, EDGE_LEFT, null);
+        final BackMotionEvent backEvent = backMotionEventFrom(0, 0);
         mMainThreadHandler.post(
                 () -> {
                     mProgressAnimator = new BackProgressAnimator();
@@ -63,9 +70,7 @@
 
     @Test
     public void testBackProgressed() throws InterruptedException {
-        final BackMotionEvent backEvent = new BackMotionEvent(
-                100, 0,
-                mTargetProgress, EDGE_LEFT, null);
+        final BackMotionEvent backEvent = backMotionEventFrom(100, mTargetProgress);
         mMainThreadHandler.post(
                 () -> mProgressAnimator.onBackProgressed(backEvent));
 
@@ -78,9 +83,7 @@
     @Test
     public void testBackCancelled() throws InterruptedException {
         // Give the animator some progress.
-        final BackMotionEvent backEvent = new BackMotionEvent(
-                100, 0,
-                mTargetProgress, EDGE_LEFT, null);
+        final BackMotionEvent backEvent = backMotionEventFrom(100, mTargetProgress);
         mMainThreadHandler.post(
                 () -> mProgressAnimator.onBackProgressed(backEvent));
         mTargetProgressCalled.await(1, TimeUnit.SECONDS);
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/TouchTrackerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/TouchTrackerTest.java
index ba9c159..d62e660 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/TouchTrackerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/TouchTrackerTest.java
@@ -47,43 +47,45 @@
     public void generatesProgress_leftEdge() {
         mTouchTracker.setGestureStartLocation(INITIAL_X_LEFT_EDGE, 0, BackEvent.EDGE_LEFT);
         float touchX = 10;
+        float velocityX = 0;
+        float velocityY = 0;
 
         // Pre-commit
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), (touchX - INITIAL_X_LEFT_EDGE) / FAKE_THRESHOLD, 0f);
 
         // Post-commit
         touchX += 100;
         mTouchTracker.setTriggerBack(true);
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), (touchX - INITIAL_X_LEFT_EDGE) / FAKE_THRESHOLD, 0f);
 
         // Cancel
         touchX -= 10;
         mTouchTracker.setTriggerBack(false);
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), 0, 0f);
 
         // Cancel more
         touchX -= 10;
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), 0, 0f);
 
         // Restart
         touchX += 10;
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), 0, 0f);
 
         // Restarted, but pre-commit
         float restartX = touchX;
         touchX += 10;
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), (touchX - restartX) / FAKE_THRESHOLD, 0f);
 
         // Restarted, post-commit
         touchX += 10;
         mTouchTracker.setTriggerBack(true);
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), (touchX - INITIAL_X_LEFT_EDGE) / FAKE_THRESHOLD, 0f);
     }
 
@@ -91,43 +93,45 @@
     public void generatesProgress_rightEdge() {
         mTouchTracker.setGestureStartLocation(INITIAL_X_RIGHT_EDGE, 0, BackEvent.EDGE_RIGHT);
         float touchX = INITIAL_X_RIGHT_EDGE - 10; // Fake right edge
+        float velocityX = 0f;
+        float velocityY = 0f;
 
         // Pre-commit
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), (INITIAL_X_RIGHT_EDGE - touchX) / FAKE_THRESHOLD, 0f);
 
         // Post-commit
         touchX -= 100;
         mTouchTracker.setTriggerBack(true);
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), (INITIAL_X_RIGHT_EDGE - touchX) / FAKE_THRESHOLD, 0f);
 
         // Cancel
         touchX += 10;
         mTouchTracker.setTriggerBack(false);
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), 0, 0f);
 
         // Cancel more
         touchX += 10;
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), 0, 0f);
 
         // Restart
         touchX -= 10;
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), 0, 0f);
 
         // Restarted, but pre-commit
         float restartX = touchX;
         touchX -= 10;
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), (restartX - touchX) / FAKE_THRESHOLD, 0f);
 
         // Restarted, post-commit
         touchX -= 10;
         mTouchTracker.setTriggerBack(true);
-        mTouchTracker.update(touchX, 0);
+        mTouchTracker.update(touchX, 0, velocityX, velocityY);
         assertEquals(getProgress(), (INITIAL_X_RIGHT_EDGE - touchX) / FAKE_THRESHOLD, 0f);
     }
 
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/pip/tv/TvPipActionProviderTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipActionProviderTest.java
index e5b61ed..02e6b8c 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipActionProviderTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipActionProviderTest.java
@@ -158,19 +158,73 @@
                 new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE}));
     }
 
-    @Test
-    public void expandedPip_toggleExpansion() {
-        assumeTelevision();
-        // PiP has expanded PiP enabled, but is in a collapsed state
+    private void check_expandedPip_updateExpansionState(
+            boolean startExpansion, boolean endExpansion, boolean updateExpected) {
+
         mActionsProvider.updateExpansionEnabled(true);
-        mActionsProvider.onPipExpansionToggled(/* expanded= */ false);
+        mActionsProvider.updatePipExpansionState(startExpansion);
 
         mActionsProvider.addListener(mMockListener);
-        mActionsProvider.onPipExpansionToggled(/* expanded= */ true);
+        mActionsProvider.updatePipExpansionState(endExpansion);
 
         assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
                 new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE}));
-        verify(mMockListener).onActionsChanged(0, 1, 3);
+
+        if (updateExpected) {
+            verify(mMockListener).onActionsChanged(0, 1, 3);
+        } else {
+            verify(mMockListener, times(0))
+                    .onActionsChanged(anyInt(), anyInt(), anyInt());
+        }
+    }
+
+    @Test
+    public void expandedPip_toggleExpansion_collapse() {
+        assumeTelevision();
+        check_expandedPip_updateExpansionState(
+                /* startExpansion= */ true,
+                /* endExpansion= */ false,
+                /* updateExpected= */ true);
+    }
+
+    @Test
+    public void expandedPip_toggleExpansion_expand() {
+        assumeTelevision();
+        check_expandedPip_updateExpansionState(
+                /* startExpansion= */ false,
+                /* endExpansion= */ true,
+                /* updateExpected= */ true);
+    }
+
+    @Test
+    public void expandedPiP_updateExpansionState_alreadyExpanded() {
+        assumeTelevision();
+        check_expandedPip_updateExpansionState(
+                /* startExpansion= */ true,
+                /* endExpansion= */ true,
+                /* updateExpected= */ false);
+    }
+
+    @Test
+    public void expandedPiP_updateExpansionState_alreadyCollapsed() {
+        assumeTelevision();
+        check_expandedPip_updateExpansionState(
+                /* startExpansion= */ false,
+                /* endExpansion= */ false,
+                /* updateExpected= */ false);
+    }
+
+    @Test
+    public void regularPiP_updateExpansionState_setCollapsed() {
+        assumeTelevision();
+        mActionsProvider.updateExpansionEnabled(false);
+        mActionsProvider.updatePipExpansionState(/* expanded= */ false);
+
+        mActionsProvider.addListener(mMockListener);
+        mActionsProvider.updatePipExpansionState(/* expanded= */ false);
+
+        verify(mMockListener, times(0))
+                .onActionsChanged(anyInt(), anyInt(), anyInt());
     }
 
     @Test
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 e8147ff..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;
@@ -49,7 +51,7 @@
 import android.view.ViewRootImpl;
 import android.view.WindowInsets;
 import android.view.WindowManager.LayoutParams;
-import android.window.TaskConstants;
+import android.window.SurfaceSyncGroup;
 import android.window.WindowContainerTransaction;
 
 import androidx.test.filters.SmallTest;
@@ -97,9 +99,13 @@
     @Mock
     private SurfaceControlViewHost mMockSurfaceControlViewHost;
     @Mock
+    private AttachedSurfaceControl mMockRootSurfaceControl;
+    @Mock
     private TestView mMockView;
     @Mock
     private WindowContainerTransaction mMockWindowContainerTransaction;
+    @Mock
+    private SurfaceSyncGroup mMockSurfaceSyncGroup;
 
     private final List<SurfaceControl.Transaction> mMockSurfaceControlTransactions =
             new ArrayList<>();
@@ -127,6 +133,8 @@
 
         doReturn(mMockSurfaceControlViewHost).when(mMockSurfaceControlViewHostFactory)
                 .create(any(), any(), any());
+        when(mMockSurfaceControlViewHost.getRootSurfaceControl())
+                .thenReturn(mMockRootSurfaceControl);
     }
 
     @Test
@@ -187,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);
@@ -219,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);
@@ -257,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);
@@ -272,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);
@@ -315,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());
@@ -376,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);
@@ -448,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);
@@ -483,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(),
@@ -538,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);
         }
@@ -553,7 +580,7 @@
             String name = "Test Window";
             WindowDecoration.AdditionalWindow additionalWindow =
                     addWindow(R.layout.desktop_mode_window_decor_handle_menu_app_info_pill, name,
-                            mMockSurfaceControlAddWindowT, x, y,
+                            mMockSurfaceControlAddWindowT, mMockSurfaceSyncGroup, x, y,
                             width, height, shadowRadius, cornerRadius);
             return additionalWindow;
         }
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/BitmapFactory.cpp b/libs/hwui/jni/BitmapFactory.cpp
index c57e6f0..38d17de 100644
--- a/libs/hwui/jni/BitmapFactory.cpp
+++ b/libs/hwui/jni/BitmapFactory.cpp
@@ -401,6 +401,14 @@
         decodeColorType = kN32_SkColorType;
     }
 
+    // b/276879147, fallback to RGBA_8888 when decoding HEIF and P010 is not supported.
+    if (decodeColorType == kRGBA_1010102_SkColorType &&
+        codec->getEncodedFormat() == SkEncodedImageFormat::kHEIF &&
+        env->CallStaticBooleanMethod(gImageDecoder_class,
+                                     gImageDecoder_isP010SupportedForHEVCMethodID) == JNI_FALSE) {
+        decodeColorType = kN32_SkColorType;
+    }
+
     sk_sp<SkColorSpace> decodeColorSpace = codec->computeOutputColorSpace(
             decodeColorType, prefColorSpace);
 
diff --git a/libs/hwui/jni/BitmapFactory.h b/libs/hwui/jni/BitmapFactory.h
index 45bffc4..a079cb4 100644
--- a/libs/hwui/jni/BitmapFactory.h
+++ b/libs/hwui/jni/BitmapFactory.h
@@ -1,8 +1,9 @@
 #ifndef _ANDROID_GRAPHICS_BITMAP_FACTORY_H_
 #define _ANDROID_GRAPHICS_BITMAP_FACTORY_H_
 
+#include <SkEncodedImageFormat.h>
+
 #include "GraphicsJNI.h"
-#include "SkEncodedImageFormat.h"
 
 extern jclass gOptions_class;
 extern jfieldID gOptions_justBoundsFieldID;
@@ -26,6 +27,9 @@
 extern jclass gBitmapConfig_class;
 extern jmethodID gBitmapConfig_nativeToConfigMethodID;
 
+extern jclass gImageDecoder_class;
+extern jmethodID gImageDecoder_isP010SupportedForHEVCMethodID;
+
 jstring getMimeTypeAsJavaString(JNIEnv*, SkEncodedImageFormat);
 
 #endif  // _ANDROID_GRAPHICS_BITMAP_FACTORY_H_
diff --git a/libs/hwui/jni/ImageDecoder.cpp b/libs/hwui/jni/ImageDecoder.cpp
index db1c188..6744c6c 100644
--- a/libs/hwui/jni/ImageDecoder.cpp
+++ b/libs/hwui/jni/ImageDecoder.cpp
@@ -25,6 +25,7 @@
 #include <SkCodecAnimation.h>
 #include <SkColorSpace.h>
 #include <SkColorType.h>
+#include <SkEncodedImageFormat.h>
 #include <SkImageInfo.h>
 #include <SkRect.h>
 #include <SkSize.h>
@@ -48,7 +49,8 @@
 
 using namespace android;
 
-static jclass    gImageDecoder_class;
+jclass gImageDecoder_class;
+jmethodID gImageDecoder_isP010SupportedForHEVCMethodID;
 static jclass    gSize_class;
 static jclass    gDecodeException_class;
 static jclass    gCanvas_class;
@@ -298,6 +300,14 @@
         colorType = kN32_SkColorType;
     }
 
+    // b/276879147, fallback to RGBA_8888 when decoding HEIF and P010 is not supported.
+    if (colorType == kRGBA_1010102_SkColorType &&
+        decoder->mCodec->getEncodedFormat() == SkEncodedImageFormat::kHEIF &&
+        env->CallStaticBooleanMethod(gImageDecoder_class,
+                                     gImageDecoder_isP010SupportedForHEVCMethodID) == JNI_FALSE) {
+        colorType = kN32_SkColorType;
+    }
+
     if (!decoder->setOutColorType(colorType)) {
         doThrowISE(env, "Failed to set out color type!");
         return nullptr;
@@ -540,6 +550,8 @@
     gImageDecoder_class = MakeGlobalRefOrDie(env, FindClassOrDie(env, "android/graphics/ImageDecoder"));
     gImageDecoder_constructorMethodID = GetMethodIDOrDie(env, gImageDecoder_class, "<init>", "(JIIZZ)V");
     gImageDecoder_postProcessMethodID = GetMethodIDOrDie(env, gImageDecoder_class, "postProcessAndRelease", "(Landroid/graphics/Canvas;)I");
+    gImageDecoder_isP010SupportedForHEVCMethodID =
+            GetStaticMethodIDOrDie(env, gImageDecoder_class, "isP010SupportedForHEVC", "()Z");
 
     gSize_class = MakeGlobalRefOrDie(env, FindClassOrDie(env, "android/util/Size"));
     gSize_constructorMethodID = GetMethodIDOrDie(env, gSize_class, "<init>", "(II)V");
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/libs/hwui/renderthread/CacheManager.cpp b/libs/hwui/renderthread/CacheManager.cpp
index 23611ef..7e9d44f 100644
--- a/libs/hwui/renderthread/CacheManager.cpp
+++ b/libs/hwui/renderthread/CacheManager.cpp
@@ -117,12 +117,8 @@
     // flush and submit all work to the gpu and wait for it to finish
     mGrContext->flushAndSubmit(/*syncCpu=*/true);
 
-    if (!Properties::isHighEndGfx && mode >= TrimLevel::MODERATE) {
-        mode = TrimLevel::COMPLETE;
-    }
-
     switch (mode) {
-        case TrimLevel::COMPLETE:
+        case TrimLevel::BACKGROUND:
             mGrContext->freeGpuResources();
             SkGraphics::PurgeAllCaches();
             mRenderThread.destroyRenderingContext();
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index 718d4a1..96bfc10 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -42,6 +42,36 @@
 namespace uirenderer {
 namespace renderthread {
 
+static std::array<std::string_view, 18> sEnableExtensions{
+        VK_KHR_BIND_MEMORY_2_EXTENSION_NAME,
+        VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME,
+        VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
+        VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME,
+        VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME,
+        VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME,
+        VK_KHR_MAINTENANCE1_EXTENSION_NAME,
+        VK_KHR_MAINTENANCE2_EXTENSION_NAME,
+        VK_KHR_MAINTENANCE3_EXTENSION_NAME,
+        VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME,
+        VK_KHR_SURFACE_EXTENSION_NAME,
+        VK_KHR_SWAPCHAIN_EXTENSION_NAME,
+        VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME,
+        VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME,
+        VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME,
+        VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME,
+        VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME,
+        VK_KHR_ANDROID_SURFACE_EXTENSION_NAME,
+};
+
+static bool shouldEnableExtension(const std::string_view& extension) {
+    for (const auto& it : sEnableExtensions) {
+        if (it == extension) {
+            return true;
+        }
+    }
+    return false;
+}
+
 static void free_features_extensions_structs(const VkPhysicalDeviceFeatures2& features) {
     // All Vulkan structs that could be part of the features chain will start with the
     // structure type followed by the pNext pointer. We cast to the CommonVulkanHeader
@@ -139,6 +169,11 @@
         bool hasKHRSurfaceExtension = false;
         bool hasKHRAndroidSurfaceExtension = false;
         for (const VkExtensionProperties& extension : mInstanceExtensionsOwner) {
+            if (!shouldEnableExtension(extension.extensionName)) {
+                ALOGV("Not enabling instance extension %s", extension.extensionName);
+                continue;
+            }
+            ALOGV("Enabling instance extension %s", extension.extensionName);
             mInstanceExtensions.push_back(extension.extensionName);
             if (!strcmp(extension.extensionName, VK_KHR_SURFACE_EXTENSION_NAME)) {
                 hasKHRSurfaceExtension = true;
@@ -219,6 +254,11 @@
         LOG_ALWAYS_FATAL_IF(VK_SUCCESS != err);
         bool hasKHRSwapchainExtension = false;
         for (const VkExtensionProperties& extension : mDeviceExtensionsOwner) {
+            if (!shouldEnableExtension(extension.extensionName)) {
+                ALOGV("Not enabling device extension %s", extension.extensionName);
+                continue;
+            }
+            ALOGV("Enabling device extension %s", extension.extensionName);
             mDeviceExtensions.push_back(extension.extensionName);
             if (!strcmp(extension.extensionName, VK_KHR_SWAPCHAIN_EXTENSION_NAME)) {
                 hasKHRSwapchainExtension = true;
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index b1d2e33..4759689 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -3730,7 +3730,12 @@
     @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
     @RequiresPermission(Manifest.permission.BLUETOOTH_STACK)
     public void setA2dpSuspended(boolean enable) {
-        AudioSystem.setParameters("A2dpSuspended=" + enable);
+        final IAudioService service = getService();
+        try {
+            service.setA2dpSuspended(enable);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
     }
 
     /**
@@ -3743,7 +3748,12 @@
     @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
     @RequiresPermission(Manifest.permission.BLUETOOTH_STACK)
     public void setLeAudioSuspended(boolean enable) {
-        AudioSystem.setParameters("LeAudioSuspended=" + enable);
+        final IAudioService service = getService();
+        try {
+            service.setLeAudioSuspended(enable);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
     }
 
     /**
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index fe5afc5..7ce189b 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -231,6 +231,12 @@
 
     void setBluetoothScoOn(boolean on);
 
+    @EnforcePermission("BLUETOOTH_STACK")
+    void setA2dpSuspended(boolean on);
+
+    @EnforcePermission("BLUETOOTH_STACK")
+    void setLeAudioSuspended(boolean enable);
+
     boolean isBluetoothScoOn();
 
     void setBluetoothA2dpOn(boolean on);
diff --git a/media/java/android/media/ImageUtils.java b/media/java/android/media/ImageUtils.java
index 7ac8446..f4caad7 100644
--- a/media/java/android/media/ImageUtils.java
+++ b/media/java/android/media/ImageUtils.java
@@ -20,6 +20,7 @@
 import android.graphics.PixelFormat;
 import android.hardware.HardwareBuffer;
 import android.media.Image.Plane;
+import android.util.Log;
 import android.util.Size;
 
 import libcore.io.Memory;
@@ -30,6 +31,7 @@
  * Package private utility class for hosting commonly used Image related methods.
  */
 class ImageUtils {
+    private static final String IMAGEUTILS_LOG_TAG = "ImageUtils";
 
     /**
      * Only a subset of the formats defined in
@@ -266,11 +268,15 @@
                 break;
             case PixelFormat.RGBA_8888:
             case PixelFormat.RGBX_8888:
+            case PixelFormat.RGBA_1010102:
                 estimatedBytePerPixel = 4.0;
                 break;
             default:
-                throw new UnsupportedOperationException(
-                        String.format("Invalid format specified %d", format));
+                if (Log.isLoggable(IMAGEUTILS_LOG_TAG, Log.VERBOSE)) {
+                    Log.v(IMAGEUTILS_LOG_TAG, "getEstimatedNativeAllocBytes() uses default"
+                            + "estimated native allocation size.");
+                }
+                estimatedBytePerPixel = 1.0;
         }
 
         return (int)(width * height * estimatedBytePerPixel * numImages);
@@ -295,6 +301,7 @@
                 }
             case PixelFormat.RGB_565:
             case PixelFormat.RGBA_8888:
+            case PixelFormat.RGBA_1010102:
             case PixelFormat.RGBX_8888:
             case PixelFormat.RGB_888:
             case ImageFormat.JPEG:
@@ -312,8 +319,11 @@
             case ImageFormat.PRIVATE:
                 return new Size(0, 0);
             default:
-                throw new UnsupportedOperationException(
-                        String.format("Invalid image format %d", image.getFormat()));
+                if (Log.isLoggable(IMAGEUTILS_LOG_TAG, Log.VERBOSE)) {
+                    Log.v(IMAGEUTILS_LOG_TAG, "getEffectivePlaneSizeForImage() uses"
+                            + "image's width and height for plane size.");
+                }
+                return new Size(image.getWidth(), image.getHeight());
         }
     }
 
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/SoundTriggerDetector.java b/media/java/android/media/soundtrigger/SoundTriggerDetector.java
index 1a3e54d..afa0a32 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerDetector.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerDetector.java
@@ -391,15 +391,6 @@
          * @hide
          */
         @Override
-        public void onError(int status) {
-            Slog.d(TAG, "onError()" + status);
-            mHandler.sendEmptyMessage(MSG_DETECTION_ERROR);
-        }
-
-        /**
-         * @hide
-         */
-        @Override
         public void onRecognitionPaused() {
             Slog.d(TAG, "onRecognitionPaused()");
             mHandler.sendEmptyMessage(MSG_DETECTION_PAUSE);
@@ -413,6 +404,42 @@
             Slog.d(TAG, "onRecognitionResumed()");
             mHandler.sendEmptyMessage(MSG_DETECTION_RESUME);
         }
+
+        /**
+         * @hide
+         */
+        @Override
+        public void onPreempted() {
+            Slog.d(TAG, "onPreempted()");
+            mHandler.sendEmptyMessage(MSG_DETECTION_ERROR);
+        }
+
+        /**
+         * @hide
+         */
+        @Override
+        public void onModuleDied() {
+            Slog.d(TAG, "onModuleDied()");
+            mHandler.sendEmptyMessage(MSG_DETECTION_ERROR);
+        }
+
+        /**
+         * @hide
+         */
+        @Override
+        public void onResumeFailed(int status) {
+            Slog.d(TAG, "onResumeFailed()" + status);
+            mHandler.sendEmptyMessage(MSG_DETECTION_ERROR);
+        }
+
+        /**
+         * @hide
+         */
+        @Override
+        public void onPauseFailed(int status) {
+            Slog.d(TAG, "onPauseFailed()" + status);
+            mHandler.sendEmptyMessage(MSG_DETECTION_ERROR);
+        }
     }
 
     private class MyHandler extends Handler {
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/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp
index 116237f..609c7a4 100644
--- a/media/jni/android_media_MediaExtractor.cpp
+++ b/media/jni/android_media_MediaExtractor.cpp
@@ -196,6 +196,15 @@
         dstSize = (size_t) env->GetDirectBufferCapacity(byteBuf);
     }
 
+    // unlikely, but GetByteArrayElements() can fail
+    if (dst == nullptr) {
+        ALOGE("no buffer into which to read the data");
+        if (byteArray != NULL) {
+            env->ReleaseByteArrayElements(byteArray, (jbyte *)dst, 0);
+        }
+        return -ENOMEM;
+    }
+
     if (dstSize < offset) {
         if (byteArray != NULL) {
             env->ReleaseByteArrayElements(byteArray, (jbyte *)dst, 0);
@@ -204,8 +213,10 @@
         return -ERANGE;
     }
 
+    // passes in the backing memory to use, so it doesn't fail
     sp<ABuffer> buffer = new ABuffer((char *)dst + offset, dstSize - offset);
 
+    buffer->setRange(0, 0);  // mark it empty
     status_t err = mImpl->readSampleData(buffer);
 
     if (byteArray != NULL) {
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/activity_confirmation.xml b/packages/CompanionDeviceManager/res/layout/activity_confirmation.xml
index d470d4c..aae30df 100644
--- a/packages/CompanionDeviceManager/res/layout/activity_confirmation.xml
+++ b/packages/CompanionDeviceManager/res/layout/activity_confirmation.xml
@@ -16,13 +16,15 @@
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        style="@style/ScrollViewStyle">
+        style="@style/ScrollViewStyle"
+        android:importantForAccessibility="no">
 
     <LinearLayout
             android:id="@+id/activity_confirmation"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:baselineAligned="false">
+            android:baselineAligned="false"
+            android:importantForAccessibility="no">
 
         <LinearLayout android:id="@+id/association_confirmation"
                       style="@style/ContainerLayout">
@@ -153,7 +155,8 @@
         <RelativeLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_weight="1">
+            android:layout_weight="1"
+            android:importantForAccessibility="noHideDescendants">
 
             <ProgressBar
                 android:id="@+id/spinner_single_device"
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/layout/vendor_header.xml b/packages/CompanionDeviceManager/res/layout/vendor_header.xml
index 16a87e5..77c79b3 100644
--- a/packages/CompanionDeviceManager/res/layout/vendor_header.xml
+++ b/packages/CompanionDeviceManager/res/layout/vendor_header.xml
@@ -33,7 +33,7 @@
         android:layout_width="48dp"
         android:layout_height="48dp"
         android:padding="12dp"
-        android:contentDescription="@string/vendor_icon_description" />
+        android:importantForAccessibility="no" />
 
     <TextView
         android:id="@+id/vendor_header_name"
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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toegang tot &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toe om &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;ን ኄንá‹Čደርሔ ይፈቀዔለቔ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ሰዓቔ"</string>
     <string name="chooser_title" msgid="2262294130493605839">"በ&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ዹሚተዳደር <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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;ን ኄንá‹Čá‹«áˆ”á‰°á‹łá‹”áˆ­ ይፈቅዳሉ?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ይህን መሹጃ ኚሔልክዎ ኄንá‹Čደርሔበቔ ይፍቀዱለቔ"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ይህን መሹጃ ኚሔልክዎ ላይ ኄንá‹Čደርሔ ይፍቀዱለቔ"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ይህን ኄርምጃ ኄንá‹Čወሔዔ ፈቃዔ ይሰጠው?"</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">"‏هل ŰȘŰ±ÙŠŰŻ Ű§Ù„ŰłÙ…Ű§Ű­ لŰȘŰ·ŰšÙŠÙ‚ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ŰšŰ§Ù„ÙˆŰ”ÙˆÙ„ Ű„Ù„Ù‰ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;۟"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"Ű§Ù„ŰłŰ§ŰčŰ©"</string>
     <string name="chooser_title" msgid="2262294130493605839">"‏ۧ۟ŰȘÙŽŰ± <xliff:g id="PROFILE_NAME">%1$s</xliff:g> Ù„ÙŠŰŻÙŠŰ±Ù‡Ű§ ŰȘŰ·ŰšÙŠÙ‚ &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"‏Ű§Ù„ŰłÙ…Ű§Ű­ لŰȘŰ·ŰšÙŠÙ‚ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ۚۄۯۧ۱۩ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"‏Ű§Ù„ŰłÙ…Ű§Ű­ لŰȘŰ·ŰšÙŠÙ‚ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ŰšŰ§Ù„ÙˆŰ”ÙˆÙ„ Ű„Ù„Ù‰ Ù‡Ű°Ù‡ Ű§Ù„Ù…ŰčÙ„ÙˆÙ…Ű§ŰȘ من Ù‡Ű§ŰȘفك"</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">"‏Ű§Ù„ŰłÙ…Ű§Ű­ لŰȘŰ·ŰšÙŠÙ‚ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ŰšŰ§Ù„ÙˆŰ”ÙˆÙ„ Ű„Ù„Ù‰ Ù‡Ű°Ù‡ Ű§Ù„Ù…ŰčÙ„ÙˆÙ…Ű§ŰȘ من Ù‡Ű§ŰȘفك"</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">"‏هل ŰȘŰ±ÙŠŰŻ Ű§Ù„ŰłÙ…Ű§Ű­ للŰȘŰ·ŰšÙŠÙ‚ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ۚۧŰȘÙ‘ŰźŰ§Ű° Ù‡Ű°Ű§ Ű§Ù„Ű„ŰŹŰ±Ű§ŰĄŰŸ"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àŠ• &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àŠàŠ•à§àŠžà§‡àŠ› àŠ•à§°àŠżàŠŹàŠČৈ àŠŠàŠżàŠŹàŠšà§‡?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"àŠ˜àŠĄàŠŒà§€"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;àŠ àŠȘà§°àŠżàŠšàŠŸàŠČàŠšàŠŸ àŠ•à§°àŠżàŠŹ àŠČàŠ—àŠŸ àŠàŠŸàŠŸ <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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àŠ• &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àŠȘà§°àŠżàŠšàŠŸàŠČàŠšàŠŸ àŠ•à§°àŠżàŠŹàŠČৈ àŠŠàŠżàŠŹàŠšà§‡?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àŠ• àŠ†àŠȘà§‹àŠšàŠŸà§° àŠ«’àŠšà§° àŠȘà§°àŠŸ àŠàŠ‡ àŠ€àŠ„à§àŠŻàŠ–àŠżàŠšàŠż àŠàŠ•à§àŠžà§‡àŠ› àŠ•à§°àŠŸà§° àŠ…àŠšà§àŠźàŠ€àŠż àŠŠàŠżàŠŻàŠŒàŠ•"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àŠ• àŠ†àŠȘà§‹àŠšàŠŸà§° àŠ«’àŠšà§° àŠȘà§°àŠŸ àŠàŠ‡ àŠ€àŠ„à§àŠŻàŠ–àŠżàŠšàŠż àŠàŠ•à§àŠžà§‡àŠ› àŠ•à§°àŠŸà§° àŠ…àŠšà§àŠźàŠ€àŠż àŠŠàŠżàŠŻàŠŒàŠ•"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;àŠ• àŠàŠ‡ àŠ•àŠŸà§°à§àŠŻàŠŸà§‹ àŠžàŠźà§àŠȘàŠŸàŠŠàŠš àŠ•à§°àŠżàŠŹàŠČৈ àŠŠàŠżàŠŹàŠšà§‡?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tətbiqinə &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; cihazına daxil olmaq icazəsi verilsin?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"izləyin"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tətbiqinə &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pristupa uređaju &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; upravlja uređajem &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"ДазĐČĐŸĐ»Ń–Ń†ŃŒ ĐżŃ€Đ°ĐłŃ€Đ°ĐŒĐ” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐŽĐŸŃŃ‚ŃƒĐż Ўа прылаЎы &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ĐłĐ°ĐŽĐ·Ń–ĐœĐœŃ–Đș"</string>
     <string name="chooser_title" msgid="2262294130493605839">"ВыбДрыцД ĐżŃ€Ń‹Đ»Đ°ĐŽŃƒ (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>), яĐșĐŸĐč буЎзД ĐșіраĐČаць ĐżŃ€Đ°ĐłŃ€Đ°ĐŒĐ° &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"ДазĐČĐŸĐ»Ń–Ń†ŃŒ ĐżŃ€Đ°ĐłŃ€Đ°ĐŒĐ” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐșіраĐČаць прылаЎаĐč &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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">"ДазĐČĐŸĐ»ŃŒŃ†Đ” ĐżŃ€Đ°ĐłŃ€Đ°ĐŒĐ” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐŒĐ”Ń†ŃŒ ĐŽĐŸŃŃ‚ŃƒĐż Ўа гэтаĐč Ń–ĐœŃ„Đ°Ń€ĐŒĐ°Ń†Ń‹Ń– Đ· ĐČашага Ń‚ŃĐ»Đ”Ń„ĐŸĐœĐ°"</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">"ДазĐČĐŸĐ»ŃŒŃ†Đ” ĐżŃ€Đ°ĐłŃ€Đ°ĐŒĐ” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐŒĐ”Ń†ŃŒ ĐŽĐŸŃŃ‚ŃƒĐż Ўа гэтаĐč Ń–ĐœŃ„Đ°Ń€ĐŒĐ°Ń†Ń‹Ń– Đ· ĐČашага Ń‚ŃĐ»Đ”Ń„ĐŸĐœĐ°"</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">"ДазĐČĐŸĐ»Ń–Ń†ŃŒ прылаЎзД &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐČыĐșĐ°ĐœĐ°Ń†ŃŒ гэта ĐŽĐ·Đ”ŃĐœĐœĐ”?"</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">"Да сД Ń€Đ°Đ·Ń€Đ”ŃˆĐž лО ĐœĐ° &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ўа ĐŸŃŃŠŃ‰Đ”ŃŃ‚ĐČяĐČа ĐŽĐŸŃŃ‚ŃŠĐż ĐŽĐŸ ŃƒŃŃ‚Ń€ĐŸĐčстĐČĐŸŃ‚ĐŸ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"Ń‡Đ°ŃĐŸĐČĐœĐžĐș"</string>
     <string name="chooser_title" msgid="2262294130493605839">"Đ˜Đ·Đ±Đ”Ń€Đ”Ń‚Đ” ŃƒŃŃ‚Ń€ĐŸĐčстĐČĐŸ (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>), ĐșĐŸĐ”Ń‚ĐŸ Ўа сД упраĐČĐ»ŃĐČа ĐŸŃ‚ &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"Đ Đ°Đ·Ń€Đ”ŃˆĐ°ĐČатД лО ĐœĐ° &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ўа упраĐČĐ»ŃĐČа ŃƒŃŃ‚Ń€ĐŸĐčстĐČĐŸŃ‚ĐŸ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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">"Đ Đ°Đ·Ń€Đ”ŃˆĐ”Ń‚Đ” ĐœĐ° &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ўа ĐŸŃŃŠŃ‰Đ”ŃŃ‚ĐČяĐČа ĐŽĐŸŃŃ‚ŃŠĐż ĐŽĐŸ тазО ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ ĐŸŃ‚ Ń‚Đ”Đ»Đ”Ń„ĐŸĐœĐ° ĐČĐž"</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">"Đ Đ°Đ·Ń€Đ”ŃˆĐ”Ń‚Đ” ĐœĐ° &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ўа ĐŸŃŃŠŃ‰Đ”ŃŃ‚ĐČяĐČа ĐŽĐŸŃŃ‚ŃŠĐż ĐŽĐŸ тазО ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ ĐŸŃ‚ Ń‚Đ”Đ»Đ”Ń„ĐŸĐœĐ° ĐČĐž"</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">"Đ Đ°Đ·Ń€Đ”ŃˆĐ°ĐČатД лО ĐœĐ° &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; Ўа ĐżŃ€Đ”ĐŽĐżŃ€ĐžĐ”ĐŒĐ° Ń‚ĐŸĐČа ĐŽĐ”ĐčстĐČОД?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àŠ…à§àŠŻàŠŸàŠȘàŠ•à§‡ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠž àŠ•àŠ°àŠŸàŠ° àŠ…àŠšà§àŠźàŠ€àŠż àŠŠà§‡àŠŹà§‡àŠš?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"àŠ˜àŠĄàŠŒàŠż"</string>
     <string name="chooser_title" msgid="2262294130493605839">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> àŠŹà§‡àŠ›à§‡ àŠšàŠżàŠš àŠŻà§‡àŠŸàŠż &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; àŠźà§àŠŻàŠŸàŠšà§‡àŠœ àŠ•àŠ°àŠŹà§‡"</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">"àŠ†àŠȘàŠšàŠż àŠ•àŠż &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àŠźà§àŠŻàŠŸàŠšà§‡àŠœ àŠ•àŠ°àŠŸàŠ° àŠœàŠšà§àŠŻ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;-àŠ•à§‡ àŠ…àŠšà§àŠźàŠ€àŠż àŠŠà§‡àŠŹà§‡àŠš?"</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">"àŠ†àŠȘàŠšàŠŸàŠ° àŠ«à§‹àŠš àŠ„à§‡àŠ•à§‡ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àŠ…à§àŠŻàŠŸàŠȘàŠ•à§‡ àŠàŠ‡ àŠ€àŠ„à§àŠŻ àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠž àŠ•àŠ°àŠŸàŠ° àŠ…àŠšà§àŠźàŠ€àŠż àŠŠàŠżàŠš"</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">"àŠ†àŠȘàŠšàŠŸàŠ° àŠ«à§‹àŠš àŠ„à§‡àŠ•à§‡ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-àŠ•à§‡ àŠàŠ‡ àŠ€àŠ„à§àŠŻ àŠ…à§àŠŻàŠŸàŠ•à§àŠžà§‡àŠž àŠ•àŠ°àŠŸàŠ° àŠ…àŠšà§àŠźàŠ€àŠż àŠŠàŠżàŠš"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/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-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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da pristupa uređaju &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da upravlja uređajem &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; accedeixi a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; gestioni &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pƙístup k &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; spravovat zaƙízení &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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í &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; adgang til &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; administrerer &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; auf das Gerät &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; das Gerät &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"Να επιτρέπεται στην εφαρμογÎź &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; να έχει πρόσβαση στη συσκευÎź &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ;"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ρολόι"</string>
     <string name="chooser_title" msgid="2262294130493605839">"Επιλέξτε ένα προφÎŻλ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> για διαχεÎŻριση από την εφαρμογÎź &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"Να επιτρέπεται στην εφαρμογÎź &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; να διαχειρÎŻζεται τη συσκευÎź &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ;"</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">"Να επιτρέπεται στο &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; η πρόσβαση σε αυτές τις πληροφορÎŻες από το τηλέφωνό σας."</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">"Επιτρέψτε στην εφαρμογÎź &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; να έχει πρόσβαση σε αυτές τις πληροφορÎŻες από το τηλέφωνό σας"</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">"Να επιτρέπεται στη συσκευÎź &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; να εκτελεÎŻ αυτÎźν την ενέργεια;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to manage &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to manage &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to manage &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to manage &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; to access &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;?‎‏‎‎‏‎"</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 &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;‎‏‎‎‏‎"</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 &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; to manage &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;?‎‏‎‎‏‎"</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 &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; 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 &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; 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 &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; administre &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda a tu &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; gestione &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; juurdepääs seadmele &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; hallata seadet &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; erabiltzeko baimena eman nahi diozu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aplikazioari?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"erlojua"</string>
     <string name="chooser_title" msgid="2262294130493605839">"Aukeratu &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; kudeatzeko baimena eman nahi diozu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"‏ŰšÙ‡ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ۧۏۧŰČه ŰŻŰ§ŰŻÙ‡ ŰŽÙˆŰŻ ŰšÙ‡ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ŰŻŰłŰȘŰ±ŰłÛŒ ÙŸÛŒŰŻŰ§ Ú©Ù†ŰŻŰŸ"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"۳ۧŰčŰȘ"</string>
     <string name="chooser_title" msgid="2262294130493605839">"‏Ű§Ù†ŰȘ۟ۧۚ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ŰšŰ±Ű§ÛŒ Ù…ŰŻÛŒŰ±ÛŒŰȘ Ú©Ű±ŰŻÙ† ۚۧ &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>‏&lt;/strong&gt;"</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">"‏ŰšÙ‡ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ۧۏۧŰČه ŰŻŰ§ŰŻÙ‡ ŰŽÙˆŰŻ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ۱ۧ Ù…ŰŻÛŒŰ±ÛŒŰȘ Ú©Ù†ŰŻŰŸ"</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">"‏ۧۏۧŰČه ŰŻŰ§ŰŻÙ† ŰšÙ‡ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ŰšŰ±Ű§ÛŒ ŰŻŰłŰȘŰ±ŰłÛŒ ŰšÙ‡ Ű§Ű·Ù„Ű§ŰčۧŰȘ ŰȘلفن"</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">"‏ŰšÙ‡ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ۧۏۧŰČه ŰŻŰłŰȘŰ±ŰłÛŒ ŰšÙ‡ Ű§ÛŒÙ† Ű§Ű·Ù„Ű§ŰčۧŰȘ ۯ۱ ŰŻŰłŰȘÚŻŰ§Ù‡ŰȘŰ§Ù† ŰŻŰ§ŰŻÙ‡ ŰŽÙˆŰŻ"</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">"‏ŰšÙ‡ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ۧۏۧŰČه ŰŻŰ§ŰŻÙ‡ ŰŽÙˆŰŻ Ű§ÛŒÙ† Ű§Ù‚ŰŻŰ§Ù… ۱ۧ Ű§Ù†ŰŹŰ§Ù… ŰŻÙ‡ŰŻŰŸ"</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ä &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; saa pääsyn laitteeseen: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 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ä &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; saa ylläpitää laitetta: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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ä &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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: &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</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ä &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à accéder à &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à gérer &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; à 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à accéder à &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à gérer &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; à 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda ao dispositivo (&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;)?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; xestione o dispositivo (&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;)?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àȘšà«‡ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àȘàȘ•્àȘžà«‡àȘž àȘ•àȘ°àȘ”àȘŸàȘšà«€ àȘźàȘ‚àȘœà«‚àȘ°à«€ àȘ†àȘȘીàȘ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"àȘžà«àȘźàȘŸàȘ°à«àȘŸàȘ”ૉàȘš"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; àȘŠà«àȘ”àȘŸàȘ°àȘŸ àȘźà«‡àȘšà«‡àȘœ àȘ•àȘ°àȘ”àȘŸ àȘźàȘŸàȘŸà«‡ àȘ•à«‹àȘˆ <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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àȘšà«‡ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àȘźà«‡àȘšà«‡àȘœ àȘ•àȘ°àȘ”àȘŸ àȘźàȘŸàȘŸà«‡ àȘźàȘ‚àȘœà«‚àȘ°à«€ àȘ†àȘȘીàȘ?"</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">"àȘ€àȘźàȘŸàȘ°àȘŸ àȘ«à«‹àȘšàȘźàȘŸàȘ‚àȘ„ી àȘ† àȘźàȘŸàȘčàȘżàȘ€à«€ àȘàȘ•્àȘžà«‡àȘž àȘ•àȘ°àȘ”àȘŸ àȘźàȘŸàȘŸà«‡, &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àȘšà«‡ àȘźàȘ‚àȘœà«‚àȘ°à«€ àȘ†àȘȘો"</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">"àȘ€àȘźàȘŸàȘ°àȘŸ àȘ«à«‹àȘšàȘźàȘŸàȘ‚àȘ„ી àȘ† àȘźàȘŸàȘčàȘżàȘ€à«€ àȘàȘ•્àȘžà«‡àȘž àȘ•àȘ°àȘ”àȘŸ àȘźàȘŸàȘŸà«‡, &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àȘšà«‡ àȘźàȘ‚àȘœà«‚àȘ°à«€ àȘ†àȘȘો"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;àȘšà«‡ àȘ† àȘȘàȘ—àȘČુàȘ‚ àȘ­àȘ°àȘ”àȘŸàȘšà«€ àȘźàȘ‚àȘœà«‚àȘ°à«€ àȘ†àȘȘીàȘ?"</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">"à€•à„à€Żà€Ÿ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; à€•à„‹ à€à€•à„à€žà„‡à€ž à€•à€°à€šà„‡ à€•à„‡ à€Čà€żà€ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€•à„‹ à€…à€šà„à€źà€€à€ż à€Šà„‡à€šà„€ à€čà„ˆ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"à€žà„à€źà€Ÿà€°à„à€Ÿà€”à„‰à€š"</string>
     <string name="chooser_title" msgid="2262294130493605839">"à€•à„‹à€ˆ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> à€šà„à€šà„‡à€‚, à€€à€Ÿà€•à€ż à€‰à€žà„‡ &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; à€•à„€ à€źà€Šà€Š à€žà„‡ à€źà„ˆà€šà„‡à€œ à€•à€żà€Żà€Ÿ à€œà€Ÿ à€žà€•à„‡"</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">"à€•à„à€Żà€Ÿ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€•à„‹ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; à€źà„ˆà€šà„‡à€œ à€•à€°à€šà„‡ à€•à„€ à€…à€šà„à€źà€€à€ż à€Šà„‡à€šà„€ à€čà„ˆ?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€•à„‹ à€…à€Șà€šà„‡ à€«à€Œà„‹à€š à€žà„‡ à€Żà€č à€œà€Ÿà€šà€•à€Ÿà€°à„€ à€à€•à„à€žà„‡à€ž à€•à€°à€šà„‡ à€•à„€ à€…à€šà„à€źà€€à€ż à€Šà„‡à€‚"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€•à„‹ à€…à€Șà€šà„‡ à€«à€Œà„‹à€š à€žà„‡ à€Żà€č à€œà€Ÿà€šà€•à€Ÿà€°à„€ à€à€•à„à€žà„‡à€ž à€•à€°à€šà„‡ à€•à„€ à€…à€šà„à€źà€€à€ż à€Šà„‡à€‚"</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">"à€•à„à€Żà€Ÿ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; à€•à„‹ à€Żà€č à€•à€Ÿà€°à„à€°à€”à€Ÿà€ˆ à€•à€°à€šà„‡ à€•à„€ à€…à€šà„à€źà€€à€ż à€Šà„‡à€šà„€ à€čà„ˆ?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da pristupa &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da upravlja uređajem &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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) &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; hozzáférését a következƑhöz: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"óra"</string>
     <string name="chooser_title" msgid="2262294130493605839">"A(z) &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 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) &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; kezelje a következƑ eszközt: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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) &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"ÔčŐžÖ‚Ő”ŐŹŐĄŐżÖ€Ő„ŐžŐŹ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ő°ŐĄŐŸŐ„ŐŹŐŸŐĄŐźŐ«Ő¶ ŐŻŐĄŐŒŐĄŐŸŐĄÖ€Ő„ŐŹ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ŐœŐĄÖ€Ö„Őš"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ŐȘեՎեց՞ւՔց"</string>
     <string name="chooser_title" msgid="2262294130493605839">"ÔžŐ¶ŐżÖ€Ő„Ö„ <xliff:g id="PROFILE_NAME">%1$s</xliff:g>Őš, վրչ ŐșŐ„ŐżÖ„ Ő§ ŐŻŐĄŐŒŐĄŐŸŐĄÖ€ŐŸŐ« &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; Ő°ŐĄŐŸŐ„ŐŹŐŸŐĄŐźŐ« ŐŻŐžŐČՎից"</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">"ÔčŐžÖ‚Ő”ŐŹŐĄŐżÖ€Ő„ŐžŐŹ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ő°ŐĄŐŸŐ„ŐŹŐŸŐĄŐźŐ«Ő¶ ŐŻŐĄŐŒŐĄŐŸŐĄÖ€Ő„ŐŹ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ŐœŐĄÖ€Ö„Őš"</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">"ÔčŐžÖ‚Ő”ŐŹŐĄŐżÖ€Ő„Ö„ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ő°ŐĄŐŸŐ„ŐŹŐŸŐĄŐźŐ«Ő¶ Ö…ŐŁŐżŐĄŐŁŐžÖ€ŐźŐ„ŐŹ ŐĄŐ”Őœ ŐżŐ„ŐČŐ„ŐŻŐžÖ‚Ő©Ő”ŐžÖ‚Ő¶Ő¶Ő„Ö€Őš Ő±Ő„Ö€ Ő°Ő„ŐŒŐĄŐ­ŐžŐœŐ«Ö"</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">"ÔčŐžÖ‚Ő”ŐŹŐĄŐżÖ€Ő„Ö„ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ő°ŐĄŐŸŐ„ŐŹŐŸŐĄŐźŐ«Ő¶ Ö…ŐŁŐżŐĄŐŁŐžÖ€ŐźŐ„ŐŹ ŐĄŐ”Őœ ŐżŐ„ŐČŐ„ŐŻŐžÖ‚Ő©Ő”ŐžÖ‚Ő¶Ő¶Ő„Ö€Őš Ő±Ő„Ö€ Ő°Ő„ŐŒŐĄŐ­ŐžŐœŐ«Ö"</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">"ÔčŐžÖ‚Ő”ŐŹŐĄŐżÖ€Ő„ŐžŐŹ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; Ő°ŐĄŐŸŐ„ŐŹŐŸŐĄŐźŐ«Ő¶ ŐŻŐĄŐżŐĄÖ€Ő„ŐŹ ŐĄŐ”Őœ գվրռվŐČŐžÖ‚Ő©Ő”ŐžÖ‚Ő¶Őš"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; mengakses &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; mengelola &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aðgang að &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; á 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; að stjórna &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; di accedere a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; di gestire &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"‏ŚœŚŚ©Śš ŚœŚŚ€ŚœŚ™Ś§ŚŠŚ™Ś” ‎&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&amp;g;‎‏ ŚœŚ’Ś©ŚȘ ڐڜ ‎&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‎‏?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"Ś©ŚąŚ•ŚŸ"</string>
     <string name="chooser_title" msgid="2262294130493605839">"‏Ś‘Ś—Ś™ŚšŚȘ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ŚœŚ Ś™Ś”Ś•Śœ Ś‘ŚŚžŚŠŚąŚ•ŚȘ &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"‏ŚžŚȘڟ Ś”ŚšŚ©ŚŚ” ŚœŚŚ€ŚœŚ™Ś§ŚŠŚ™Ś” ‎&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&amp;g;‎‏ ŚœŚ Ś”Śœ ڐŚȘ ‎&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‎‏"</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">"‏ŚžŚȘڟ ŚŚ™Ś©Ś•Śš ŚœŚŚ€ŚœŚ™Ś§ŚŠŚ™Ś” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ŚœŚ’Ś©ŚȘ ŚœŚžŚ™Ś“Śą ڔږڔ ŚžŚ”Ś˜ŚœŚ€Ś•ŚŸ کڜښ"</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">"‏ŚžŚȘڟ ŚŚ™Ś©Ś•Śš ŚœŚŚ€ŚœŚ™Ś§ŚŠŚ™Ś” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ŚœŚ’Ś©ŚȘ ŚœŚžŚ™Ś“Śą ڔږڔ ŚžŚ”Ś˜ŚœŚ€Ś•ŚŸ کڜښ"</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">"‏ڜŚȘŚȘ Ś”ŚšŚ©ŚŚ” ŚœŚžŚ›Ś©Ś™Śš &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ŚœŚ‘ŚŠŚą ڐŚȘ Ś”Ś€ŚąŚ•ŚœŚ” ڔږڕ?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; に &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ぞたスクセă‚čă‚’èš±ćŻă—ăŸă™ă‹ïŒŸ"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ă‚Šă‚©ăƒƒăƒ"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ăźçźĄç†ćŻŸè±ĄăšăȘる<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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; に &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ăźçźĄç†ă‚’èš±ćŻă—ăŸă™ă‹ïŒŸ"</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">"ă‚čăƒžăƒŒăƒˆăƒ•ă‚©ăƒłăźă“ăźæƒ…ć ±ăžăźă‚ąă‚Żă‚»ă‚čを &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ă«èš±ćŻ"</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">"ă‚čăƒžăƒŒăƒˆăƒ•ă‚©ăƒłăźă“ăźæƒ…ć ±ăžăźă‚ąă‚Żă‚»ă‚čを &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ă«èš±ćŻ"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ă«ă“ăźæ“äœœăźćźŸèĄŒă‚’èš±ćŻă—ăŸă™ă‹ïŒŸ"</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">"მიანიჭებთ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; აპს &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; მოწყობილობაზე წვდომას?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"საათი"</string>
     <string name="chooser_title" msgid="2262294130493605839">"აირჩიეთ <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, რომელიáƒȘ უნდა მართოს &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;-მა"</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">"ნება დართეთ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>-ს&lt;/strong&gt; მართოს &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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">"ნება დართეთ, რომ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; აპს áƒ°áƒ„áƒáƒœáƒ“áƒ”áƒĄ ამ ინჀორმაáƒȘიაზე წვდომა თჄვენი áƒąáƒ”áƒšáƒ”áƒ€áƒáƒœáƒ˜áƒ“áƒáƒœ"</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">"ნება დართეთ, რომ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; აპს áƒ°áƒ„áƒáƒœáƒ“áƒ”áƒĄ ამ ინჀორმაáƒȘიაზე წვდომა თჄვენი áƒąáƒ”áƒšáƒ”áƒ€áƒáƒœáƒ˜áƒ“áƒáƒœ"</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">"გსურთ ნება მისáƒȘეთ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ქ&lt;/strong&gt; ამ áƒ›áƒáƒ„áƒ›áƒ”áƒ“áƒ”áƒ‘áƒ˜áƒĄ ჹესასრულებლად?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ò›ĐŸĐ»ĐŽĐ°ĐœĐ±Đ°ŃŃ‹ĐœĐ° &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; Ò›Ò±Ń€Ń‹Đ»Ò“Ń‹ŃŃ‹Đœ паĐčĐŽĐ°Đ»Đ°ĐœŃƒÒ“Đ° Ń€Ò±Ò›ŃĐ°Ń‚ Đ±Đ”Ń€Ńƒ ĐșДрДĐș пД?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ŃĐ°Ò“Đ°Ń‚"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; Đ°Ń€Ò›Ń‹Đ»Ń‹ Đ±Đ°ŃÒ›Đ°Ń€Ń‹Đ»Đ°Ń‚Ń‹Đœ <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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ò›ĐŸĐ»ĐŽĐ°ĐœĐ±Đ°ŃŃ‹ĐœĐ° &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; Ò›Ò±Ń€Ń‹Đ»Ò“Ń‹ŃŃ‹Đœ Đ±Đ°ŃÒ›Đ°Ń€ŃƒÒ“Đ° Ń€Ò±Ò›ŃĐ°Ń‚ Đ±Đ”Ń€Ńƒ ĐșДрДĐș пД?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ò›ĐŸĐ»ĐŽĐ°ĐœĐ±Đ°ŃŃ‹ĐœĐ° Ń‚Đ”Đ»Đ”Ń„ĐŸĐœŃ‹ÒŁŃ‹Đ·ĐŽĐ°Ò“Ń‹ ĐŸŃŃ‹ Đ°Ò›ĐżĐ°Ń€Đ°Ń‚Ń‚Ń‹ паĐčĐŽĐ°Đ»Đ°ĐœŃƒÒ“Đ° Ń€Ò±Ò›ŃĐ°Ń‚ Đ±Đ”Ń€Ń–ÒŁŃ–Đ·."</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ò›ĐŸĐ»ĐŽĐ°ĐœĐ±Đ°ŃŃ‹ĐœĐ° Ń‚Đ”Đ»Đ”Ń„ĐŸĐœŃ‹ÒŁŃ‹Đ·ĐŽĐ°Ò“Ń‹ ĐŸŃŃ‹ Đ°Ò›ĐżĐ°Ń€Đ°Ń‚Ń‚Ń‹ паĐčĐŽĐ°Đ»Đ°ĐœŃƒÒ“Đ° Ń€Ò±Ò›ŃĐ°Ń‚ Đ±Đ”Ń€Ń–ÒŁŃ–Đ·."</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; Ò›Ò±Ń€Ń‹Đ»Ò“Ń‹ŃŃ‹ĐœĐ° Đ±Ò±Đ» әрДĐșДтті ĐŸŃ€Ń‹ĐœĐŽĐ°ŃƒÒ“Đ° Ń€Ò±Ò›ŃĐ°Ń‚ Đ±Đ”Ń€Ńƒ ĐșДрДĐș пД?"</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">"ážąáž“áž»áž‰áŸ’áž‰áž¶ážáž±áŸ’áž™ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ចឌលប្រស &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ឬ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"នាឥិកា"</string>
     <string name="chooser_title" msgid="2262294130493605839">"ជ្រសសរសស <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ដសម្បឞឱ្យស្ថិតក្រោម​ការគ្រប់គ្រងរបស់ &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"ážąáž“áž»áž‰áŸ’áž‰áž¶ážáž±áŸ’áž™ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; គ្រប់គ្រង &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ឬ?"</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">"ážąáž“áž»áž‰áŸ’áž‰áž¶ážáž±áŸ’áž™ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; áž…ážŒáž›áž”áŸ’ážšážŸáž–áŸážáŸŒáž˜áž¶áž“áž“áŸáŸ‡áž–ážžáž‘ážŒážšážŸáž–áŸ’áž‘ážšáž”ážŸáŸ‹ážąáŸ’áž“áž€"</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">"ážąáž“áž»áž‰áŸ’áž‰áž¶ážáž±áŸ’áž™ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; áž…ážŒáž›áž˜ážŸáž›áž–áŸážáŸŒáž˜áž¶áž“áž“áŸáŸ‡áž–ážžáž‘ážŒážšážŸáž–áŸ’áž‘ážšáž”ážŸáŸ‹ážąáŸ’áž“áž€"</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">"ážąáž“áž»áž‰áŸ’áž‰áž¶ážáž±áŸ’áž™ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; áž’áŸ’ážœážŸážŸáž€áž˜áŸ’áž˜áž—áž¶áž–áž“áŸáŸ‡ážŹ?"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àȅàČšàłàČšàł àČȘàłàȰàČ”àł‡àȶàČżàČžàČČàł &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àČ—àł† àȅàČšàłàČźàČ€àČżàČžàČŹàł‡àČ•àł‡?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"àČ”àł€àČ•àłàČ·àČżàČžàČż"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; àČźàł‚àČČàȕ àČšàČżàČ°àłàČ”àČčàČżàČžàČŹàł‡àȕàČŸàČŠ <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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;? àČšàČżàČ°àłàČ”àČčàČżàČžàČČàł &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àČ—àł† àȅàČšàłàČźàČ€àČżàČžàČŹàł‡àČ•àł‡?"</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">"àČšàČżàČźàłàČź àČ«àł‹àČšàł àČźàł‚àČČàȕ àȈ àČźàČŸàČčàČżàČ€àČżàČŻàČšàłàČšàł àČ†àłàČŻàČ•àłàČžàł†àČžàł àČźàČŸàČĄàČČàł &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àČ—àł† àȅàČšàłàČźàČ€àČżàČžàČż"</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">"àČšàČżàČźàłàČź àČ«àł‹àČšàł àČźàł‚àČČàȕ àȈ àČźàČŸàČčàČżàČ€àČżàČŻàČšàłàČšàł àČȘàłàȰàČ”àł‡àȶàČżàČžàČČàł &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àČ—àł† àȅàČšàłàČźàČ€àČżàČžàČż"</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">"àȈ àČ†àłàČŻàČ•àłàČ·àČšàł àȅàČšàłàČšàł àČ€àł†àČ—àł†àČŠàłàČ•àłŠàČłàłàČłàČČàł &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/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-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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;에서 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;에 ì•Ąì„žìŠ€í•˜ë„ëĄ 허용하시êČ ìŠ”ë‹ˆêčŒ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ì‹œêł„"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;에서 êŽ€ëŠŹí•  <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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;에서 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;? ꞰꞰ넌 êŽ€ëŠŹí•˜ë„ëĄ 허용"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;읎 휎대전화의 읎 ì •ëłŽì— ì•Ąì„žìŠ€í•˜ë„ëĄ 허용합니닀."</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 앱읎 휎대전화에서 읎 ì •ëłŽì— ì•Ąì„žìŠ€í•˜ë„ëĄ 허용"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; êž°êž°ê°€ 읎 작업을 ìˆ˜í–‰í•˜ë„ëĄ 허용하시êČ ìŠ”ë‹ˆêčŒ?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐșĐŸĐ»ĐŽĐŸĐœĐŒĐŸŃŃƒĐœĐ° &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; Ń‚ÒŻĐ·ĐŒÓ©ĐłÒŻĐœÓ© ĐșĐžŃ€ÒŻÒŻĐłÓ© уруĐșсат бДрДсОзбО?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"саат"</string>
     <string name="chooser_title" msgid="2262294130493605839">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; Ń‚Đ°Ń€Đ°Đ±Ń‹ĐœĐ°Đœ башĐșĐ°Ń€Ń‹Đ»ŃŃ‹Đœ"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐșĐŸĐ»ĐŽĐŸĐœĐŒĐŸŃŃƒĐœĐ° &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; Ń‚ÒŻĐ·ĐŒÓ©ĐłÒŻĐœ тДсĐșÓ©Ó©ĐłÓ© уруĐșсат бДрДсОзбО?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐșĐŸĐ»ĐŽĐŸĐœĐŒĐŸŃŃƒĐœĐ° Ń‚Đ”Đ»Đ”Ń„ĐŸĐœŃƒÒŁŃƒĐ·ĐŽĐ°ĐłŃ‹ ушул ĐŒĐ°Đ°Đ»Ń‹ĐŒĐ°Ń‚Ń‚Ń‹ ĐșÓ©Ń€ÒŻÒŻĐłÓ© уруĐșсат Đ±Đ”Ń€ĐžÒŁĐžĐ·"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐșĐŸĐ»ĐŽĐŸĐœĐŒĐŸŃŃƒĐœĐ° Ń‚Đ”Đ»Đ”Ń„ĐŸĐœŃƒÒŁŃƒĐ·ĐŽĐ°ĐłŃ‹ ушул ĐŒĐ°Đ°Đ»Ń‹ĐŒĐ°Ń‚Ń‚Ń‹ ĐșÓ©Ń€ÒŻÒŻĐłÓ© уруĐșсат Đ±Đ”Ń€ĐžÒŁĐžĐ·"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; Ń‚ÒŻĐ·ĐŒÓ©ĐłÒŻĐœÓ© бул араĐșДттО атĐșарууга уруĐșсат бДрДсОзбО?"</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">"àș­àș°àș™àșžàșàșČàș” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ໃàș«à»‰à»€àș‚àș»à»‰àșČເàș–àșŽàș‡ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àșšà»?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ໂàșĄàș‡"</string>
     <string name="chooser_title" msgid="2262294130493605839">"ເàș„àș·àș­àș <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ເàșžàș·à»ˆàș­à»ƒàș«à»‰àș–àș·àșàșˆàș±àș”àșàșČàș™à»‚àș”àș &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"àș­àș°àș™àșžàșàșČàș” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àșˆàș±àș”àșàșČàș™ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àșšà»?"</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">"àș­àș°àș™àșžàșàșČàș” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ໃàș«à»‰à»€àș‚àș»à»‰àșČເàș–àșŽàș‡àș‚ໍ້àșĄàșčàș™àș™àș”້àșˆàșČàșà»‚àș—àș„àș°àșȘàș±àșšàș‚àș­àș‡àș—່àșČàș™à»„àș”້"</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">"àș­àș°àș™àșžàșàșČàș” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ໃàș«à»‰à»€àș‚àș»à»‰àșČເàș–àșŽàș‡àș‚ໍ້àșĄàșčàș™àș™àș”້àșˆàșČàșà»‚àș—àș„àș°àșȘàș±àșšàș‚àș­àș‡àș—່àșČàș™à»„àș”້"</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">"àș­àș°àș™àșžàșàșČàș” &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ເàșžàș·à»ˆàș­àș”àșłà»€àș™àș”àș™àș„àșłàșȘàș±à»ˆàș‡àș™àș”້àșšà»?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pasiekti &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; (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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; valdyti &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; piekÄŒĆ«t ierÄ«cei &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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ē &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; piekÄŒĆ«t ierÄ«cei &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"ĐŒĐ” ĐŽĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đ” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ўа простапуĐČа ĐŽĐŸ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"Ń‡Đ°ŃĐŸĐČĐœĐžĐș"</string>
     <string name="chooser_title" msgid="2262294130493605839">"Đ˜Đ·Đ±Đ”Ń€Đ”Ń‚Đ” <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ŃĐŸ ĐșĐŸŃ˜ŃˆŃ‚ĐŸ ŃœĐ” упраĐČуĐČа &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"ĐŒĐ” ĐŽĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đ” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ўа упраĐČуĐČа ŃĐŸ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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">"ОĐČĐŸĐ·ĐŒĐŸĐ¶Đ”Ń‚Đ” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ўа простапуĐČа ĐŽĐŸ ĐŸĐČОД ĐżĐŸĐŽĐ°Ń‚ĐŸŃ†Đž ĐœĐ° Ń‚Đ”Đ»Đ”Ń„ĐŸĐœĐŸŃ‚"</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">"Đ”ĐŸĐ·ĐČĐŸĐ»Đ”Ń‚Đ” &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Ўа простапуĐČа ĐŽĐŸ ĐŸĐČОД ĐżĐŸĐŽĐ°Ń‚ĐŸŃ†Đž ĐœĐ° Ń‚Đ”Đ»Đ”Ń„ĐŸĐœĐŸŃ‚"</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">"ĐŒĐ” ĐŽĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đ” &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; Ўа ĐłĐŸ ĐżŃ€Đ”Đ·Đ”ĐŒĐ” ĐŸĐČа ĐŽĐ”Ń˜ŃŃ‚ĐČĐŸ?"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àŽ†àŽ•à”‌àŽžàŽžà” àŽšà”†àŽŻà”àŽŻàŽŸà”» &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àŽŽàŽšà”àŽšàŽ€àŽżàŽšà”† àŽ…àŽšà”àŽ”àŽŠàŽżàŽ•à”àŽ•àŽŁà”‹?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"àŽ”àŽŸàŽšà”àŽšà”"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; àŽ‰àŽȘàŽŻà”‹àŽ—àŽżàŽšà”àŽšà” àŽźàŽŸàŽšà”‡àŽœà” àŽšà”†àŽŻà”àŽŻà”àŽšà”àŽšàŽ€àŽżàŽšà” àŽ’àŽ°à” <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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;? àŽźàŽŸàŽšà”‡àŽœà” àŽšà”†àŽŻà”àŽŻàŽŸà”», &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àŽŽàŽšà”àŽšàŽ€àŽżàŽšà”† àŽ…àŽšà”àŽ”àŽŠàŽżàŽ•à”àŽ•à”àŽ•"</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">"àŽšàŽżàŽ™à”àŽ™àŽłà”àŽŸà”† àŽ«à”‹àŽŁàŽżà”œ àŽšàŽżàŽšà”àŽšà” àŽˆ àŽ”àŽżàŽ”àŽ°àŽ™à”àŽ™à”Ÿ àŽ†àŽ•à”‌àŽžàŽžà” àŽšà”†àŽŻà”àŽŻàŽŸà”» &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àŽ†àŽȘà”àŽȘàŽżàŽšà”† àŽ…àŽšà”àŽ”àŽŠàŽżàŽ•à”àŽ•à”àŽ•"</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">"àŽšàŽżàŽ™à”àŽ™àŽłà”àŽŸà”† àŽ«à”‹àŽŁàŽżà”œ àŽšàŽżàŽšà”àŽšà” àŽˆ àŽ”àŽżàŽ”àŽ°àŽ™à”àŽ™à”Ÿ àŽ†àŽ•à”‌àŽžàŽžà” àŽšà”†àŽŻà”àŽŻàŽŸà”» &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àŽ†àŽȘà”àŽȘàŽżàŽšà”† àŽ…àŽšà”àŽ”àŽŠàŽżàŽ•à”àŽ•à”àŽ•"</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">"àŽˆ àŽȘà”àŽ°àŽ”à”ŒàŽ€à”àŽ€àŽšàŽ‚ àŽšàŽŸàŽ€à”àŽ€àŽŸà”» &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/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-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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;-ĐŽ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-ĐŽ Ń…Đ°ĐœĐŽĐ°Ń…Ń‹Đł Đ·Ó©ĐČŃˆÓ©Ó©Ń€Ó©Ń… ÒŻÒŻ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"цаг"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;-Đœ уЮорЮах<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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-ĐŽ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;-Đł уЮорЮахыг Đ·Ó©ĐČŃˆÓ©Ó©Ń€Ó©Ń… ÒŻÒŻ?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-ĐŽ Ń‚Đ°ĐœŃ‹ ŃƒŃ‚Đ°ŃĐœĐ°Đ°Ń ŃĐœŃ ĐŒŃĐŽŃŃĐ»ŃĐ»ĐŽ Ń…Đ°ĐœĐŽĐ°Ń…Ń‹Đł Đ·Ó©ĐČŃˆÓ©Ó©Ń€ĐœÓ© ÒŻÒŻ"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-ĐŽ Ń‚Đ°ĐœŃ‹ ŃƒŃ‚Đ°ŃĐœĐ°Đ°Ń ŃĐœŃ ĐŒŃĐŽŃŃĐ»ŃĐ»ĐŽ Ń…Đ°ĐœĐŽĐ°Ń…Ń‹Đł Đ·Ó©ĐČŃˆÓ©Ó©Ń€ĐœÓ© ÒŻÒŻ"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;-ĐŽ ŃĐœŃ ÒŻĐčлЎлОĐčĐł хоĐčхоĐčĐł Đ·Ó©ĐČŃˆÓ©Ó©Ń€Ó©Ń… ÒŻÒŻ?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€Čà€Ÿ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; à€…‍à„…à€•à„à€žà„‡à€ž à€•à€°à€Łà„à€Żà€Ÿà€šà„€ à€…à€šà„à€źà€€à„€ à€Šà„à€Żà€Ÿà€Żà€šà„€ à€†à€čà„‡ à€•à€Ÿ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"à€”à„‰à€š"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; à€Šà„à€”à€Ÿà€°à„‡ à€”à„à€Żà€”à€žà„à€„à€Ÿà€Șà€żà€€ à€•à€°à€Łà„à€Żà€Ÿà€žà€Ÿà€ à„€ <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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€Čà€Ÿ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; à€”à„à€Żà€”à€žà„à€„à€Ÿà€Șà€żà€€ à€•à€°à€Łà„à€Żà€Ÿà€šà„€ à€…à€šà„à€źà€€à„€ à€Šà„à€Żà€Ÿà€Żà€šà„€ à€†à€čà„‡?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€Čà€Ÿ à€čà„€ à€źà€Ÿà€čà€żà€€à„€ à€€à„à€źà€šà„à€Żà€Ÿ à€«à„‹à€šà€”à€°à„‚à€š à€…‍à„…à€•à„à€žà„‡à€ž à€•à€°à€Łà„à€Żà€Ÿà€žà€Ÿà€ à„€ à€…à€šà„à€źà€€à„€ à€Šà„à€Żà€Ÿ"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€Čà€Ÿ à€čà„€ à€źà€Ÿà€čà€żà€€à„€ à€€à„à€źà€šà„à€Żà€Ÿ à€«à„‹à€šà€”à€°à„‚à€š à€…‍à„…à€•à„à€žà„‡à€ž à€•à€°à€Łà„à€Żà€Ÿà€žà€Ÿà€ à„€ à€…à€šà„à€źà€€à„€ à€Šà„à€Żà€Ÿ"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; à€Čà€Ÿ à€čà„€ à€•à„ƒà€€à„€ à€•à€°à€Łà„à€Żà€Ÿà€šà„€ à€…à€šà„à€źà€€à„€ à€Šà„à€Żà€Ÿà€Żà€šà„€ à€†à€čà„‡ à€•à€Ÿ?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; untuk mengakses &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; mengurus &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; အာှ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;? á€žá€Żá€¶á€žá€á€œá€„á€·á€șá€•á€Œá€Żá€á€Œá€„á€șှ"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"နာရြ"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; က စဟမံခန့á€șခလá€Čရနá€ș <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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ကို &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; အာှ á€…á€źá€™á€¶á€á€œá€„á€·á€șá€•á€Œá€Żá€™á€œá€Źá€žá‹"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ကို သင့á€șဖုနá€șသမဟ ကဥချကá€șအလကá€ș á€žá€Żá€¶á€žá€á€œá€„á€·á€șá€•á€Œá€Żá€™á€Šá€ș"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; အာှ သင့á€șဖုနá€șသမဟ ကဥချကá€șအလကá€ș á€žá€Żá€¶á€žá€á€œá€„á€·á€șá€•á€Œá€Żá€á€Œá€„á€șှ"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ကို á€€á€žá€­á€Żá€·á€œá€Żá€•á€șဆေဏငá€șခလင့á€șá€•á€Œá€Żá€™á€œá€Źá€žá‹"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tilgang til &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; administrere &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€Čà€Ÿà€ˆ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; à€Șà„à€°à€Żà„‹à€— à€—à€°à„à€šà„‡ à€…à€šà„à€źà€€à€ż à€Šà€żà€šà„‡ à€čà„‹?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"à€˜à€Ąà„€"</string>
     <string name="chooser_title" msgid="2262294130493605839">"à€†à€«à„‚à€Čà„‡ &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; à€Șà„à€°à€Żà„‹à€— à€—à€°à„€ à€”à„à€Żà€”à€žà„à€„à€Ÿà€Șà€š à€—à€°à„à€š à€šà€Ÿà€čà„‡à€•à„‹ <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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€Čà€Ÿà€ˆ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; à€”à„à€Żà€”à€žà„à€„à€Ÿà€Șà€š à€—à€°à„à€šà„‡ à€…à€šà„à€źà€€à€ż à€Šà€żà€šà„‡ à€čà„‹?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€Čà€Ÿà€ˆ à€€à€Șà€Ÿà€ˆà€‚à€•à„‹ à€«à„‹à€šà€źà€Ÿ à€­à€à€•à„‹ à€Żà„‹ à€œà€Ÿà€šà€•à€Ÿà€°à„€ à€čà„‡à€°à„à€šà„‡ à€€à€„à€Ÿ à€Șà„à€°à€Żà„‹à€— à€—à€°à„à€šà„‡ à€…à€šà„à€źà€€à€ż à€Šà€żà€šà„à€čà„‹à€žà„"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à€Čà€Ÿà€ˆ à€€à€Șà€Ÿà€ˆà€‚à€•à„‹ à€«à„‹à€šà€źà€Ÿ à€­à€à€•à„‹ à€Żà„‹ à€œà€Ÿà€šà€•à€Ÿà€°à„€ à€čà„‡à€°à„à€šà„‡ à€€à€„à€Ÿ à€Șà„à€°à€Żà„‹à€— à€—à€°à„à€šà„‡ à€…à€šà„à€źà€€à€ż à€Šà€żà€šà„à€čà„‹à€žà„"</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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; à€Čà€Ÿà€ˆ à€Żà„‹ à€•à€Ÿà€°à„à€Ż à€—à€°à„à€šà„‡ à€…à€šà„à€źà€€à€ż à€Šà€żà€šà„‡ à€čà„‹?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toegang geven tot &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toestaan &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;àŹ•à­ àŹ†àŹ•à­àŹžà­‡àŹž àŹ•àŹ°àŹżàŹŹàŹŸ àŹȘàŹŸàŹ‡àŹ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àŹ•à­ àŹ…àŹšà­àŹźàŹ€àŹż àŹŠà­‡àŹŹà­‡?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"à­±àŹŸàŹšà­"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; àŹŠà­à­±àŹŸàŹ°àŹŸ àŹȘàŹ°àŹżàŹšàŹŸàŹłàŹżàŹ€ àŹčà­‡àŹŹàŹŸ àŹȘàŹŸàŹ‡àŹ àŹàŹ• <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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;àŹ•à­ àŹȘàŹ°àŹżàŹšàŹŸàŹłàŹšàŹŸ àŹ•àŹ°àŹżàŹŹàŹŸ àŹȘàŹŸàŹ‡àŹ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àŹ•à­ àŹ…àŹšà­àŹźàŹ€àŹż àŹŠà­‡àŹŹà­‡?"</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">"àŹ†àŹȘàŹŁàŹ™à­àŹ• àŹ«à­‹àŹšàŹ°à­ àŹàŹčàŹż àŹžà­‚àŹšàŹšàŹŸàŹ•à­ àŹ†àŹ•à­àŹžà­‡àŹž àŹ•àŹ°àŹżàŹŹàŹŸ àŹȘàŹŸàŹ‡àŹ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àŹ•à­ àŹ…àŹšà­àŹźàŹ€àŹż àŹŠàŹżàŹ…àŹšà­àŹ€à­"</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">"àŹ†àŹȘàŹŁàŹ™à­àŹ• àŹ«à­‹àŹšàŹ°à­ àŹàŹčàŹż àŹžà­‚àŹšàŹšàŹŸàŹ•à­ àŹ†àŹ•à­àŹžà­‡àŹž àŹ•àŹ°àŹżàŹŹàŹŸ àŹȘàŹŸàŹ‡àŹ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;àŹ•à­ àŹ…àŹšà­àŹźàŹ€àŹż àŹŠàŹżàŹ…àŹšà­àŹ€à­"</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">"àŹàŹčàŹż àŹȘàŹŠàŹ•à­àŹ·à­‡àŹȘ àŹšà­‡àŹŹàŹŸ àŹȘàŹŸàŹ‡àŹ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;àŹ•à­ àŹ…àŹšà­àŹźàŹ€àŹż àŹŠà­‡àŹŹà­‡?"</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">"àš•à©€ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àššà©‚à©° &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àš€à©±àš• àšȘàščà©à©°àšš àš•àš°àšš àšŠà©€ àš†àš—àšżàš† àšŠà©‡àšŁà©€ àščੈ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"àšžàšźàšŸàš°àšŸ-àš”àšŸàšš"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; àš”à©±àšČà©‹àš‚ àšȘà©àš°àšŹà©°àš§àšżàš€ àš•à©€àš€à©‡ àšœàšŸàšŁ àšČàšˆ <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">"àš•à©€ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àššà©‚à©° &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àšŠàšŸ àšȘà©àš°àšŹà©°àš§àšš àš•àš°àšš àšŠà©€ àš†àš—àšżàš† àšŠà©‡àšŁà©€ àščੈ?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àššà©‚à©° àš€à©àščàšŸàšĄà©‡ àš«àšŒà©‹àšš àš€à©‹àš‚ àš‡àšž àšœàšŸàšŁàš•àšŸàš°à©€ àš€à©±àš• àšȘàščà©à©°àšš àš•àš°àšš àšŠà©€ àš†àš—àšżàš† àšŠàšżàš“"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àššà©‚à©° àš€à©àščàšŸàšĄà©‡ àš«àšŒà©‹àšš àš€à©‹àš‚ àš‡àšž àšœàšŸàšŁàš•àšŸàš°à©€ àš€à©±àš• àšȘàščà©à©°àšš àš•àš°àšš àšŠà©€ àš†àš—àšżàš† àšŠàšżàš“"</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">"àš•à©€ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; àššà©‚à©° àš‡àšč àš•àšŸàš°àš”àšŸàšˆ àš•àš°àšš àšŠà©€ àš†àš—àšżàš† àšŠà©‡àšŁà©€ àščੈ?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; do tego urządzenia (&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;)?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; do urządzenia &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acesse o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; gerencie o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aceda ao &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; faça a gestão do dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acesse o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; gerencie o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; să acceseze dispozitivul &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; să gestioneze &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"ĐŸŃ€Đ”ĐŽĐŸŃŃ‚Đ°ĐČоть ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃŽ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐŽĐŸŃŃ‚ŃƒĐż Đș ŃƒŃŃ‚Ń€ĐŸĐčстĐČу &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"часы"</string>
     <string name="chooser_title" msgid="2262294130493605839">"ВыбДрОтД ŃƒŃŃ‚Ń€ĐŸĐčстĐČĐŸ (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>), ĐșĐŸŃ‚ĐŸŃ€Ń‹ĐŒ Đ±ŃƒĐŽĐ”Ń‚ упраĐČĐ»ŃŃ‚ŃŒ ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"Đ Đ°Đ·Ń€Đ”ŃˆĐžŃ‚ŃŒ ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃŽ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; упраĐČĐ»ŃŃ‚ŃŒ ŃƒŃŃ‚Ń€ĐŸĐčстĐČĐŸĐŒ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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">"Đ Đ°Đ·Ń€Đ”ŃˆĐžŃ‚Đ” ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃŽ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐżĐŸĐ»ŃƒŃ‡Đ°Ń‚ŃŒ эту ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃŽ с ĐČĐ°ŃˆĐ”ĐłĐŸ Ń‚Đ”Đ»Đ”Ń„ĐŸĐœĐ°"</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">"Đ Đ°Đ·Ń€Đ”ŃˆĐžŃ‚Đ” ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃŽ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐżĐŸĐ»ŃƒŃ‡Đ°Ń‚ŃŒ эту ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃŽ с ĐČĐ°ŃˆĐ”ĐłĐŸ Ń‚Đ”Đ»Đ”Ń„ĐŸĐœĐ°"</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">"Đ Đ°Đ·Ń€Đ”ŃˆĐžŃ‚ŃŒ ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃŽ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐČŃ‹ĐżĐŸĐ»ĐœŃŃ‚ŃŒ ŃŃ‚ĐŸ ĐŽĐ”ĐčстĐČОД?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; හට &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; වෙත à¶Žà·Š‍රවේශ වීඞට ඉඩ à¶Żà·™à¶±à·Šà¶± à¶Ż?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ඔරගෝසුව"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ඞගින් කළඞනාකරණà¶ș කරනු ගැබීඞට <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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; හට &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; කළඞනා කිරීඞට ඉඩ à¶Żà·™à¶±à·Šà¶± à¶Ż?"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; හට ඔබගේ à¶Żà·”à¶»à¶šà¶źà¶±à¶șෙන් ඞෙඞ තොරතුරුවගට à¶Žà·Š‍රවේශ වීඞට ඉඩ à¶Żà·™à¶±à·Šà¶±"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; හට ඔබගේ à¶Żà·”à¶»à¶šà¶źà¶±à¶șෙන් ඞෙඞ තොරතුරුවගට à¶Žà·Š‍රවේශ වීඞට ඉඩ à¶Żà·™à¶±à·Šà¶±"</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">"ඞෙඞ ක්‍රිà¶șාව කිරීඞට &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; හට ඉඩ à¶Żà·™à¶±à·Šà¶± à¶Ż?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; prístup k zariadeniu &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; spravovaĆ„ zariadenie &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; dovoliti dostop do naprave &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; dovoliti upravljanje naprave &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; qasja te &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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ë &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; të menaxhojë &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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ë &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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ë &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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ë &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"Đ”ĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đ” Ўа &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; проступа ŃƒŃ€Đ”Ń’Đ°Ń˜Ńƒ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"сат"</string>
     <string name="chooser_title" msgid="2262294130493605839">"ОЎабДрОтД <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ĐșĐŸŃ˜ĐžĐŒ ћД упраĐČљато аплОĐșацоја &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"ЖДлОтД лО Ўа ĐŽĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đ” Ўа &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; упраĐČља ŃƒŃ€Đ”Ń’Đ°Ń˜Đ”ĐŒ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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">"Đ”ĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đ” Ўа &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; проступа ĐŸĐČĐžĐŒ ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ˜Đ°ĐŒĐ° са Ń‚Đ”Đ»Đ”Ń„ĐŸĐœĐ°"</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">"Đ”ĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đ” Ўа &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; проступа ĐŸĐČĐžĐŒ ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ˜Đ°ĐŒĐ° са Ń‚Đ”Đ»Đ”Ń„ĐŸĐœĐ°"</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">"ЖДлОтД лО Ўа ĐŽĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đ” Ўа &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐŸĐ±Đ°ĐČĐž ĐŸĐČу раЮњу?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; får åtkomst till &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; hanterar &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; å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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; å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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ifikie &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; idhibiti &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àźšàźŸàź€àź©àź€àŻàź€àŻˆ àź…àźŁàŻàź• &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àź†àźȘàŻàźžàŻˆ àź…àź©àŻàźźàź€àźżàź•àŻàź•àź”àźŸ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"àź”àźŸàźŸàŻàźšàŻ"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; àź†àźȘàŻàźžàŻ àźšàźżàź°àŻàź”àź•àźżàź•àŻàź•àź•àŻàź•àŻ‚àźŸàźżàźŻ <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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&amp;gt àźšàźŸàź€àź©àź€àŻàź€àŻˆ àźšàźżàź°àŻàź”àź•àźżàź•àŻàź• &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àź†àźȘàŻàźžàŻˆ àź…àź©àŻàźźàź€àźżàź•àŻàź•àź”àźŸ?"</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">"àźźàŻŠàźȘàŻˆàźČàźżàźČàŻ àź‰àźłàŻàźł àź‡àźšàŻàź€àź€àŻ àź€àź•àź”àźČàŻàź•àźłàŻˆ àź…àźŁàŻàź•, &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àź†àźȘàŻàźžàŻˆ àź…àź©àŻàźźàź€àźżàź•àŻàź•àź”àŻàźźàŻ"</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">"àź‰àź™àŻàź•àźłàŻ àźźàŻŠàźȘàŻˆàźČàźżàźČàźżàź°àŻàźšàŻàź€àŻ àź‡àźšàŻàź€àź€àŻ àź€àź•àź”àźČàŻˆ àź…àźŁàŻàź• &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àź†àźȘàŻàźžàŻˆ àź…àź©àŻàźźàź€àźżàźŻàŻàź™àŻàź•àźłàŻ"</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">"àź‡àźšàŻàź€àźšàŻ àźšàŻ†àźŻàźČàŻˆàźšàŻ àźšàŻ†àźŻàŻàźŻ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&amp;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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‌చు à°Żà°Ÿà°•à±à°žà±†à°žà± à°šà±‡à°Żà°Ąà°Ÿà°šà°żà°•à°ż &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;‌చు à°…à°šà±à°źà°€à°żà°‚à°šà°Ÿà°Čà°Ÿ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ఔటచ్"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ఊ్ఔటరట à°źà±‡à°šà±‡à°œà± à°šà±‡à°Żà°Źà°Ąà°Ÿà°Ÿà°šà°żà°•à°ż ఒక <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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‌చు à°źà±‡à°šà±‡à°œà± à°šà±‡à°Żà°Ąà°Ÿà°šà°żà°•à°ż &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;‌చు à°…à°šà±à°źà°€à°żà°‚à°šà°Ÿà°Čà°Ÿ?"</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">"à°źà±€ ఫోచ్ à°šà±à°‚à°Ąà°ż ఈ à°žà°źà°Ÿà°šà°Ÿà°°à°Ÿà°šà±à°šà°ż à°Żà°Ÿà°•à±à°žà±†à°žà± à°šà±‡à°Żà°Ąà°Ÿà°šà°żà°•à°ż &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à°Żà°Ÿà°Ș్‌చు à°…à°šà±à°źà°€à°żà°‚à°šà°‚à°Ąà°ż"</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">"à°źà±€ ఫోచ్ à°šà±à°‚à°Ąà°ż ఈ à°žà°źà°Ÿà°šà°Ÿà°°à°Ÿà°šà±à°šà°ż à°Żà°Ÿà°•à±à°žà±†à°žà± à°šà±‡à°Żà°Ąà°Ÿà°šà°żà°•à°ż &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à°Żà°Ÿà°Ș్‌చు à°…à°šà±à°źà°€à°żà°‚à°šà°‚à°Ąà°ż"</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">"ఈ à°šà°°à±à°Żà°šà± à°…à°źà°Čు à°šà±‡à°Żà°Ąà°Ÿà°šà°żà°•à°ż &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;‌చు à°…à°šà±à°źà°€à°żà°‚à°šà°Ÿà°Čà°Ÿ?"</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">"àž­àž™àžžàžàžČàž•àčƒàž«àč‰ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àč€àž‚àč‰àžČàž–àž¶àž‡ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"àž™àžČàžŹàžŽàžàžČ"</string>
     <string name="chooser_title" msgid="2262294130493605839">"àč€àž„àž·àž­àž<xliff:g id="PROFILE_NAME">%1$s</xliff:g>àž—àž”àčˆàžˆàž°àčƒàž«àč‰àžĄàž”àžàžČàžŁàžˆàž±àž”àžàžČàžŁàč‚àž”àžą &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"àž­àž™àžžàžàžČàž•àčƒàž«àč‰ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àžˆàž±àž”àžàžČàžŁ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; àč„àž«àžĄ"</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">"àž­àž™àžžàžàžČàž•àčƒàž«àč‰ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àč€àž‚àč‰àžČàž–àž¶àž‡àž‚àč‰àž­àžĄàžčàž„àž™àž”àč‰àžˆàžČàžàč‚àž—àžŁàžšàž±àžžàž—àčŒàž‚àž­àž‡àž„àžžàž“"</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">"àž­àž™àžžàžàžČàž•àčƒàž«àč‰ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; àč€àž‚àč‰àžČàž–àž¶àž‡àž‚àč‰àž­àžĄàžčàž„àž™àž”àč‰àžˆàžČàžàč‚àž—àžŁàžšàž±àžžàž—àčŒàž‚àž­àž‡àž„àžžàž“"</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">"àž­àž™àžžàžàžČàž•àčƒàž«àč‰ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; àž—àžłàž‡àžČàž™àž™àž”àč‰àč„àž«àžĄ"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; na i-access ang &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; na pamahalaan ang &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; cihazına erißmesi için &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; uygulamasına izin verin"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"saat"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; uygulamasına &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"НаЮато ĐŽĐŸĐŽĐ°Ń‚Đșу &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐŽĐŸŃŃ‚ŃƒĐż ĐŽĐŸ Ń–ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†Ń–Ń— ĐœĐ° &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ĐłĐŸĐŽĐžĐœĐœĐžĐș"</string>
     <string name="chooser_title" msgid="2262294130493605839">"Đ’ĐžĐ±Đ”Ń€Ń–Ń‚ŃŒ <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, яĐșĐžĐŒ ĐșĐ”Ń€ŃƒĐČĐ°Ń‚ĐžĐŒĐ” ĐŽĐŸĐŽĐ°Ń‚ĐŸĐș &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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">"Đ”ĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đž ĐŽĐŸĐŽĐ°Ń‚Đșу &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐșĐ”Ń€ŃƒĐČато ĐżŃ€ĐžŃŃ‚Ń€ĐŸŃ”ĐŒ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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">"НаЮаĐčтД ĐŽĐŸĐŽĐ°Ń‚Đșу &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐŽĐŸŃŃ‚ŃƒĐż ĐŽĐŸ цієї Ń–ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†Ń–Ń— Đ· Ń‚Đ”Đ»Đ”Ń„ĐŸĐœĐ°"</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">"НаЮаĐčтД ĐżŃ€ĐžŃŃ‚Ń€ĐŸŃŽ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐŽĐŸŃŃ‚ŃƒĐż ĐŽĐŸ цієї Ń–ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†Ń–Ń— Đ· Ń‚Đ”Đ»Đ”Ń„ĐŸĐœĐ°"</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">"Đ”ĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đž ĐŽĐŸĐŽĐ°Ń‚Đșу &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ĐČĐžĐșĐŸĐœŃƒĐČато цю Юію?"</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">"‏‎&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;‎ کو ‎&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‎ ŰȘÚ© Ű±ŰłŰ§ŰŠÛŒ کی ۧۏۧŰČŰȘ ŰŻÛŒÚș۟"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ŰŻÛŒÚ©ÚŸÛŒÚș"</string>
     <string name="chooser_title" msgid="2262294130493605839">"‏&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; کے Ű°Ű±ÛŒŰčے Ù†ŰžÙ… Ú©ŰŠÛ’ ŰŹŰ§Ù†Û’ Ú©ÛŒÙ„ŰŠÛ’ <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">"‏&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; کو &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; کۧ Ù†ŰžÙ… Ú©Ű±Ù†Û’ کی ۧۏۧŰČŰȘ ŰŻÛŒÚș۟"</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">"‏Ű§ÙŸÙ†Û’ فون ŰłÛ’ Ű§Ù† مŰčÙ„ÙˆÙ…Ű§ŰȘ ŰȘÚ© Ű±ŰłŰ§ŰŠÛŒ Ű­Ű§Ű”Ù„ Ú©Ű±Ù†Û’ کی &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; کو ۧۏۧŰČŰȘ ŰŻÛŒÚș"</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">"‏Ű§ÙŸÙ†Û’ فون ŰłÛ’ ۧ۳ مŰčÙ„ÙˆÙ…Ű§ŰȘ ŰȘÚ© Ű±ŰłŰ§ŰŠÛŒ Ű­Ű§Ű”Ù„ Ú©Ű±Ù†Û’ کی &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; کو ۧۏۧŰČŰȘ ŰŻÛŒÚș"</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">"‏&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; کو یہ Ú©Ű§Ű±Ű±ÙˆŰ§ŰŠÛŒ Ű§Ù†ŰŹŰ§Ù… ŰŻÛŒÙ†Û’ کی ۧۏۧŰČŰȘ ŰŻÛŒÚș۟"</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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ilovasiga &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; qurilmasidan foydalanishga ruxsat berilsinmi?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"soat"</string>
     <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ilovasiga &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; truy cáș­p vào &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; quáșŁn lý &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 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">"ć…èźž&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;èźżé—ź&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"æ‰‹èĄš"</string>
     <string name="chooser_title" msgid="2262294130493605839">"选择芁由&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;缡理的<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">"ć…èźž&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;缡理&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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>”&lt;strong&gt;&lt;/strong&gt;èźżé—źæ‚šæ‰‹æœșäž­çš„èż™éĄčäżĄæŻ"</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">"ć…èźž &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; èźżé—źæ‚šæ‰‹æœșäž­çš„èż™éĄčäżĄæŻ"</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">"ć…èźž&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;èż›èĄŒæ­€æ“äœœïŒŸ"</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>」&lt;strong&gt;&lt;/strong&gt;歘揖「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;ć—ŽïŒŸ"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"手錶"</string>
     <string name="chooser_title" msgid="2262294130493605839">"遞擇由 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 缡理的<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>」&lt;strong&gt;&lt;/strong&gt;缡理「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;ć—ŽïŒŸ"</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>」&lt;strong&gt;&lt;/strong&gt;ć­˜ć–æ‚šæ‰‹æ©Ÿäž­çš„é€™é …èł‡æ–™"</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>」&lt;strong&gt;&lt;/strong&gt;ć­˜ć–æ‚šæ‰‹æ©Ÿäž­çš„é€™é …èł‡æ–™"</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>」&lt;strong&gt;&lt;/strong&gt;ćŸ·èĄŒæ­€æ“äœœć—ŽïŒŸ"</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>」&lt;strong&gt;&lt;/strong&gt;歘揖「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;ć—ŽïŒŸ"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"手錶"</string>
     <string name="chooser_title" msgid="2262294130493605839">"éžæ“‡èŠèź“ă€Œ<xliff:g id="APP_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;缡理的<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>」&lt;strong&gt;&lt;/strong&gt;缡理「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;ć—ŽïŒŸ"</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>」&lt;strong&gt;&lt;/strong&gt;ć­˜ć–æ‰‹æ©Ÿäž­çš„é€™é …èł‡èšŠ"</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>」&lt;strong&gt;&lt;/strong&gt;ć­˜ć–äœ æ‰‹æ©Ÿäž­çš„é€™é …èł‡èšŠ"</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>」&lt;strong&gt;&lt;/strong&gt;ćŸ·èĄŒé€™é …æ“äœœć—ŽïŒŸ"</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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ukufinyelela &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</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-&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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-&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ukuthi ifinyelele i-&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</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-&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 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/res/values/strings.xml b/packages/CompanionDeviceManager/res/values/strings.xml
index ebfb86d..74072e9 100644
--- a/packages/CompanionDeviceManager/res/values/strings.xml
+++ b/packages/CompanionDeviceManager/res/values/strings.xml
@@ -113,6 +113,18 @@
     <!-- Back button for the helper consent dialog [CHAR LIMIT=30] -->
     <string name="consent_back">Back</string>
 
+    <!-- Action when permission list view is expanded CHAR LIMIT=30] -->
+    <string name="permission_expanded">Expanded</string>
+
+    <!-- Expand action permission list CHAR LIMIT=30] -->
+    <string name="permission_expand">Expand</string>
+
+    <!-- Action when permission list view is collapsed CHAR LIMIT=30] -->
+    <string name="permission_collapsed">Collapsed</string>
+
+    <!-- Collapse action permission list CHAR LIMIT=30] -->
+    <string name="permission_collapse">Collapse</string>
+
     <!-- ================== System data transfer ==================== -->
     <!-- Title of the permission sync confirmation dialog. [CHAR LIMIT=NONE] -->
     <string name="permission_sync_confirmation_title">Give apps on &lt;strong&gt;<xliff:g id="companion_device_name" example="Galaxy Watch 5">%1$s</xliff:g>&lt;/strong&gt; the same permissions as on &lt;strong&gt;<xliff:g id="primary_device_name" example="Pixel 6">%2$s</xliff:g>&lt;/strong&gt;?</string>
@@ -120,11 +132,8 @@
     <!-- Text of the permission sync explanation in the confirmation dialog. [CHAR LIMIT=NONE] -->
     <string name="permission_sync_summary">This may include &lt;strong&gt;Microphone&lt;/strong&gt;, &lt;strong&gt;Camera&lt;/strong&gt;, and &lt;strong&gt;Location access&lt;/strong&gt;, and other sensitive permissions on &lt;strong&gt;<xliff:g id="companion_device_name" example="My Watch">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;You can change these permissions any time in your Settings on &lt;strong&gt;<xliff:g id="companion_device_name" example="My Watch">%1$s</xliff:g>&lt;/strong&gt;.</string>
 
-    <!--Description for vendor icon [CHAR LIMIT=30]-->
-    <string name="vendor_icon_description">App Icon</string>
-
     <!--Description for information icon [CHAR LIMIT=30]-->
-    <string name="vendor_header_button_description">More Information Button</string>
+    <string name="vendor_header_button_description">More Information</string>
 
     <!-- ================= Permissions ================= -->
 
diff --git a/packages/CompanionDeviceManager/res/values/styles.xml b/packages/CompanionDeviceManager/res/values/styles.xml
index b167377..e85190b 100644
--- a/packages/CompanionDeviceManager/res/values/styles.xml
+++ b/packages/CompanionDeviceManager/res/values/styles.xml
@@ -36,7 +36,7 @@
     </style>
 
     <style name="DescriptionTitle"
-           parent="@android:style/TextAppearance.DeviceDefault.Medium">
+           parent="@android:style/TextAppearance.DeviceDefault">
         <item name="android:layout_width">match_parent</item>
         <item name="android:layout_height">wrap_content</item>
         <item name="android:gravity">center</item>
diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/PermissionListAdapter.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/PermissionListAdapter.java
index 556a05c..b86ef64 100644
--- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/PermissionListAdapter.java
+++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/PermissionListAdapter.java
@@ -27,6 +27,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.TextView;
@@ -121,24 +122,40 @@
         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.
+
+        setAccessibility(view, viewType,
+                AccessibilityNodeInfo.ACTION_CLICK, R.string.permission_expand);
+
+        // 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);
+                    view.setContentDescription(mContext.getString(R.string.permission_expanded));
+                    setAccessibility(view, viewType,
+                            AccessibilityNodeInfo.ACTION_CLICK, R.string.permission_collapse);
+                    viewHolder.mPermissionSummary.setFocusable(true);
                 } else {
                     viewHolder.mExpandButton.setImageResource(R.drawable.btn_expand_more);
                     viewHolder.mPermissionSummary.setVisibility(View.GONE);
                     viewHolder.mExpandButton.setTag(R.drawable.btn_expand_more);
+                    view.setContentDescription(mContext.getString(R.string.permission_collapsed));
+                    setAccessibility(view, viewType,
+                            AccessibilityNodeInfo.ACTION_CLICK, R.string.permission_expanded);
+                    viewHolder.mPermissionSummary.setFocusable(false);
                 }
             });
+        } 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 +167,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 +191,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);
@@ -191,6 +200,18 @@
         }
     }
 
+    private void setAccessibility(View view, int viewType, int action, int resourceId) {
+        final String actionString = mContext.getString(resourceId);
+        final String permission = mContext.getString(sTitleMap.get(viewType));
+        view.setAccessibilityDelegate(new View.AccessibilityDelegate() {
+            public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
+                super.onInitializeAccessibilityNodeInfo(host, info);
+                info.addAction(new AccessibilityNodeInfo.AccessibilityAction(action,
+                        actionString + permission));
+            }
+        });
+    }
+
     void setPermissionType(List<Integer> permissions) {
         mPermissions = permissions;
     }
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/CredentialManagerRepo.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
index e53e956..a9bee03 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
@@ -107,7 +107,7 @@
 
         initialUiState = when (requestInfo?.type) {
             RequestInfo.TYPE_CREATE -> {
-                val defaultProviderId = userConfigRepo.getDefaultProviderId()
+                val defaultProviderIdSetByUser = userConfigRepo.getDefaultProviderId()
                 val isPasskeyFirstUse = userConfigRepo.getIsPasskeyFirstUse()
                 val providerEnableListUiState = getCreateProviderEnableListInitialUiState()
                 val providerDisableListUiState = getCreateProviderDisableListInitialUiState()
@@ -115,12 +115,14 @@
                     getCreateRequestDisplayInfoInitialUiState(originName)!!
                 UiState(
                     createCredentialUiState = CreateFlowUtils.toCreateCredentialUiState(
-                        providerEnableListUiState,
-                        providerDisableListUiState,
-                        defaultProviderId,
-                        requestDisplayInfoUiState,
+                        enabledProviders = providerEnableListUiState,
+                        disabledProviders = providerDisableListUiState,
+                        defaultProviderIdPreferredByApp =
+                        requestDisplayInfoUiState.appPreferredDefaultProviderId,
+                        defaultProviderIdSetByUser = defaultProviderIdSetByUser,
+                        requestDisplayInfo = requestDisplayInfoUiState,
                         isOnPasskeyIntroStateAlready = false,
-                        isPasskeyFirstUse
+                        isPasskeyFirstUse = isPasskeyFirstUse,
                     )!!,
                     getCredentialUiState = null,
                     cancelRequestState = cancelUiRequestState
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
index 24f92c0..8b9c8b9 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
@@ -19,9 +19,9 @@
 import android.content.Intent
 import android.credentials.ui.BaseDialogResult
 import android.credentials.ui.RequestInfo
+import android.net.Uri
 import android.os.Bundle
 import android.os.ResultReceiver
-import android.provider.Settings
 import android.util.Log
 import androidx.activity.ComponentActivity
 import androidx.activity.compose.rememberLauncherForActivityResult
@@ -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)
@@ -192,7 +182,9 @@
             this@CredentialSelectorActivity.finish()
         } else if (dialogState == DialogState.CANCELED_FOR_SETTINGS) {
             Log.d(Constants.LOG_TAG, "Received signal to finish the activity and launch settings.")
-            this@CredentialSelectorActivity.startActivity(Intent(Settings.ACTION_SYNC_SETTINGS))
+            val settingsIntent = Intent(ACTION_CREDENTIAL_PROVIDER)
+            settingsIntent.data = Uri.parse("package:" + this.getPackageName())
+            this@CredentialSelectorActivity.startActivity(settingsIntent)
             this@CredentialSelectorActivity.finish()
         }
     }
@@ -222,4 +214,8 @@
             dismissOnTimeout = true,
         )
     }
+
+    companion object {
+        const val ACTION_CREDENTIAL_PROVIDER = "android.settings.CREDENTIAL_PROVIDER"
+    }
 }
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
index 29ec970..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)
     }
@@ -250,9 +251,15 @@
             return
         }
         val newUiState = CreateFlowUtils.toCreateCredentialUiState(
-            prevUiState.enabledProviders, prevUiState.disabledProviders,
-            userConfigRepo.getDefaultProviderId(), prevUiState.requestDisplayInfo, true,
-            userConfigRepo.getIsPasskeyFirstUse())
+            enabledProviders = prevUiState.enabledProviders,
+            disabledProviders = prevUiState.disabledProviders,
+            defaultProviderIdPreferredByApp =
+            prevUiState.requestDisplayInfo.appPreferredDefaultProviderId,
+            defaultProviderIdSetByUser = userConfigRepo.getDefaultProviderId(),
+            requestDisplayInfo = prevUiState.requestDisplayInfo,
+            isOnPasskeyIntroStateAlready = true,
+            isPasskeyFirstUse = userConfigRepo.getIsPasskeyFirstUse()
+        )
         if (newUiState == null) {
             Log.d(Constants.LOG_TAG, "Unable to update create ui state")
             onInternalError()
@@ -308,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 64addf2..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,19 +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
+            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)
@@ -215,6 +220,7 @@
                     // TODO(b/276777444): replace with direct library constant reference once
                     // exposed.
                     "androidx.credentials.BUNDLE_KEY_PREFER_IDENTITY_DOC_UI"),
+                preferTopBrandingContent = preferTopBrandingContent,
             )
         }
 
@@ -462,8 +468,12 @@
                 createCredentialRequest.type,
                 createCredentialRequest.credentialData,
                 createCredentialRequest.candidateQueryData,
-                createCredentialRequest.isSystemProviderRequired
+                createCredentialRequest.isSystemProviderRequired,
+                createCredentialRequest.origin,
             )
+            val appPreferredDefaultProviderId: String? =
+                if (!requestInfo.hasPermissionToOverrideDefault()) null
+                else createCredentialRequestJetpack?.displayInfo?.preferDefaultProvider
             return when (createCredentialRequestJetpack) {
                 is CreatePasswordRequest -> RequestDisplayInfo(
                     createCredentialRequestJetpack.id,
@@ -472,6 +482,7 @@
                     appLabel,
                     context.getDrawable(R.drawable.ic_password_24) ?: return null,
                     preferImmediatelyAvailableCredentials = false,
+                    appPreferredDefaultProviderId = appPreferredDefaultProviderId,
                 )
                 is CreatePublicKeyCredentialRequest -> {
                     newRequestDisplayInfoFromPasskeyJson(
@@ -480,6 +491,7 @@
                         context = context,
                         preferImmediatelyAvailableCredentials =
                         createCredentialRequestJetpack.preferImmediatelyAvailableCredentials,
+                        appPreferredDefaultProviderId = appPreferredDefaultProviderId,
                     )
                 }
                 is CreateCustomCredentialRequest -> {
@@ -495,6 +507,7 @@
                         typeIcon = displayInfo.credentialTypeIcon?.loadDrawable(context)
                             ?: context.getDrawable(R.drawable.ic_other_sign_in_24) ?: return null,
                         preferImmediatelyAvailableCredentials = false,
+                        appPreferredDefaultProviderId = appPreferredDefaultProviderId,
                     )
                 }
                 else -> null
@@ -504,20 +517,27 @@
         fun toCreateCredentialUiState(
             enabledProviders: List<EnabledProviderInfo>,
             disabledProviders: List<DisabledProviderInfo>?,
-            defaultProviderId: String?,
+            defaultProviderIdPreferredByApp: String?,
+            defaultProviderIdSetByUser: String?,
             requestDisplayInfo: RequestDisplayInfo,
             isOnPasskeyIntroStateAlready: Boolean,
             isPasskeyFirstUse: Boolean,
         ): CreateCredentialUiState? {
             var lastSeenProviderWithNonEmptyCreateOptions: EnabledProviderInfo? = null
             var remoteEntry: RemoteInfo? = null
-            var defaultProvider: EnabledProviderInfo? = null
+            var defaultProviderPreferredByApp: EnabledProviderInfo? = null
+            var defaultProviderSetByUser: EnabledProviderInfo? = null
             var createOptionsPairs:
                 MutableList<Pair<CreateOptionInfo, EnabledProviderInfo>> = mutableListOf()
             enabledProviders.forEach { enabledProvider ->
-                if (defaultProviderId != null) {
-                    if (enabledProvider.id == defaultProviderId) {
-                        defaultProvider = enabledProvider
+                if (defaultProviderIdPreferredByApp != null) {
+                    if (enabledProvider.id == defaultProviderIdPreferredByApp) {
+                        defaultProviderPreferredByApp = enabledProvider
+                    }
+                }
+                if (defaultProviderIdSetByUser != null) {
+                    if (enabledProvider.id == defaultProviderIdSetByUser) {
+                        defaultProviderSetByUser = enabledProvider
                     }
                 }
                 if (enabledProvider.createOptions.isNotEmpty()) {
@@ -536,12 +556,14 @@
                     remoteEntry = currRemoteEntry
                 }
             }
+            val defaultProvider = defaultProviderPreferredByApp ?: defaultProviderSetByUser
             val initialScreenState = toCreateScreenState(
-                /*createOptionSize=*/createOptionsPairs.size,
-                /*isOnPasskeyIntroStateAlready=*/isOnPasskeyIntroStateAlready,
-                /*requestDisplayInfo=*/requestDisplayInfo,
-                /*defaultProvider=*/defaultProvider, /*remoteEntry=*/remoteEntry,
-                /*isPasskeyFirstUse=*/isPasskeyFirstUse
+                createOptionSize = createOptionsPairs.size,
+                isOnPasskeyIntroStateAlready = isOnPasskeyIntroStateAlready,
+                requestDisplayInfo = requestDisplayInfo,
+                defaultProvider = defaultProvider,
+                remoteEntry = remoteEntry,
+                isPasskeyFirstUse = isPasskeyFirstUse
             ) ?: return null
             return CreateCredentialUiState(
                 enabledProviders = enabledProviders,
@@ -667,6 +689,7 @@
             appLabel: String,
             context: Context,
             preferImmediatelyAvailableCredentials: Boolean,
+            appPreferredDefaultProviderId: String?,
         ): RequestDisplayInfo? {
             val json = JSONObject(requestJson)
             var passkeyUsername = ""
@@ -687,6 +710,7 @@
                 appLabel,
                 context.getDrawable(R.drawable.ic_passkey_24) ?: return null,
                 preferImmediatelyAvailableCredentials,
+                appPreferredDefaultProviderId,
             )
         }
     }
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/common/ui/SectionHeader.kt b/packages/CredentialManager/src/com/android/credentialmanager/common/ui/SectionHeader.kt
index 14bf4f2..2df0c7a9 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/common/ui/SectionHeader.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/common/ui/SectionHeader.kt
@@ -27,8 +27,12 @@
 import com.android.credentialmanager.ui.theme.LocalAndroidColorScheme
 
 @Composable
-fun CredentialListSectionHeader(text: String) {
-    InternalSectionHeader(text, LocalAndroidColorScheme.current.colorOnSurfaceVariant)
+fun CredentialListSectionHeader(text: String, isFirstSection: Boolean) {
+    InternalSectionHeader(
+        text = text,
+        color = LocalAndroidColorScheme.current.colorOnSurfaceVariant,
+        applyTopPadding = !isFirstSection
+    )
 }
 
 @Composable
@@ -37,8 +41,10 @@
 }
 
 @Composable
-private fun InternalSectionHeader(text: String, color: Color) {
-    Row(modifier = Modifier.fillMaxWidth().wrapContentHeight().padding(top = 8.dp)) {
+private fun InternalSectionHeader(text: String, color: Color, applyTopPadding: Boolean = false) {
+    Row(modifier = Modifier.fillMaxWidth().wrapContentHeight().padding(
+        top = if (applyTopPadding) 8.dp else 0.dp
+    )) {
         SectionHeaderText(
             text,
             modifier = Modifier.padding(top = 20.dp, bottom = 8.dp),
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt
index 66d7db8..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,
@@ -435,7 +435,7 @@
     }
     SheetContainerCard {
         item { HeadlineIcon(imageVector = Icons.Outlined.NewReleases) }
-        item { Divider(thickness = 24.dp, color = Color.Transparent) }
+        item { Divider(thickness = 16.dp, color = Color.Transparent) }
         item {
             HeadlineText(
                 text = stringResource(
@@ -633,6 +633,7 @@
             }
         }
         item {
+            Divider(thickness = 8.dp, color = Color.Transparent)
             MoreAboutPasskeySectionHeader(
                 text = stringResource(R.string.public_key_cryptography_title)
             )
@@ -641,6 +642,7 @@
             }
         }
         item {
+            Divider(thickness = 8.dp, color = Color.Transparent)
             MoreAboutPasskeySectionHeader(
                 text = stringResource(R.string.improved_account_security_title)
             )
@@ -649,6 +651,7 @@
             }
         }
         item {
+            Divider(thickness = 8.dp, color = Color.Transparent)
             MoreAboutPasskeySectionHeader(
                 text = stringResource(R.string.seamless_transition_title)
             )
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
index 4332fb3..225dbf2 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
@@ -107,6 +107,7 @@
   val appName: String,
   val typeIcon: Drawable,
   val preferImmediatelyAvailableCredentials: Boolean,
+  val appPreferredDefaultProviderId: String?,
 )
 
 /**
@@ -125,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 b8b7ac3..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 {
@@ -323,12 +340,15 @@
             bottomPadding = 0.dp,
         )
     }) {
+        var isFirstSection = true
         // For username
         items(sortedUserNameToCredentialEntryList) { item ->
             PerUserNameCredentials(
                 perUserNameCredentialEntryList = item,
                 onEntrySelected = onEntrySelected,
+                isFirstSection = isFirstSection,
             )
+            isFirstSection = false
         }
         // Locked password manager
         if (authenticationEntryList.isNotEmpty()) {
@@ -336,7 +356,9 @@
                 LockedCredentials(
                     authenticationEntryList = authenticationEntryList,
                     onEntrySelected = onEntrySelected,
+                    isFirstSection = isFirstSection,
                 )
+                isFirstSection = false
             }
         }
         // From another device
@@ -346,27 +368,43 @@
                 RemoteEntryCard(
                     remoteEntry = remoteEntry,
                     onEntrySelected = onEntrySelected,
+                    isFirstSection = isFirstSection,
                 )
+                isFirstSection = false
             }
         }
         // Manage sign-ins (action chips)
         item {
             ActionChips(
                 providerInfoList = providerInfoList,
-                onEntrySelected = onEntrySelected
+                onEntrySelected = onEntrySelected,
+                isFirstSection = isFirstSection,
             )
+            isFirstSection = false
         }
     }
     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(
     providerInfoList: List<ProviderInfo>,
     onEntrySelected: (BaseEntry) -> Unit,
+    isFirstSection: Boolean,
 ) {
     val actionChips = providerInfoList.flatMap { it.actionEntryList }
     if (actionChips.isEmpty()) {
@@ -374,7 +412,8 @@
     }
 
     CredentialListSectionHeader(
-        text = stringResource(R.string.get_dialog_heading_manage_sign_ins)
+        text = stringResource(R.string.get_dialog_heading_manage_sign_ins),
+        isFirstSection = isFirstSection,
     )
     CredentialContainerCard {
         Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {
@@ -389,9 +428,11 @@
 fun RemoteEntryCard(
     remoteEntry: RemoteEntryInfo,
     onEntrySelected: (BaseEntry) -> Unit,
+    isFirstSection: Boolean,
 ) {
     CredentialListSectionHeader(
-        text = stringResource(R.string.get_dialog_heading_from_another_device)
+        text = stringResource(R.string.get_dialog_heading_from_another_device),
+        isFirstSection = isFirstSection,
     )
     CredentialContainerCard {
         Column(
@@ -413,9 +454,11 @@
 fun LockedCredentials(
     authenticationEntryList: List<AuthenticationEntryInfo>,
     onEntrySelected: (BaseEntry) -> Unit,
+    isFirstSection: Boolean,
 ) {
     CredentialListSectionHeader(
-        text = stringResource(R.string.get_dialog_heading_locked_password_managers)
+        text = stringResource(R.string.get_dialog_heading_locked_password_managers),
+        isFirstSection = isFirstSection,
     )
     CredentialContainerCard {
         Column(
@@ -433,11 +476,13 @@
 fun PerUserNameCredentials(
     perUserNameCredentialEntryList: PerUserNameCredentialEntryList,
     onEntrySelected: (BaseEntry) -> Unit,
+    isFirstSection: Boolean,
 ) {
     CredentialListSectionHeader(
         text = stringResource(
             R.string.get_dialog_heading_for_username, perUserNameCredentialEntryList.userName
-        )
+        ),
+        isFirstSection = isFirstSection,
     )
     CredentialContainerCard {
         Column(
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/DynamicSystemInstallationService/AndroidManifest.xml b/packages/DynamicSystemInstallationService/AndroidManifest.xml
index c2aaeac..776bf2b 100644
--- a/packages/DynamicSystemInstallationService/AndroidManifest.xml
+++ b/packages/DynamicSystemInstallationService/AndroidManifest.xml
@@ -36,6 +36,10 @@
                 <data android:scheme="http" />
                 <data android:scheme="https" />
             </intent-filter>
+            <intent-filter>
+                <action android:name="android.os.image.action.START_INSTALL" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
         </activity>
 
         <receiver
diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
index 2c4b478..b265a42 100644
--- a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
+++ b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
@@ -19,6 +19,7 @@
 import static android.os.AsyncTask.Status.FINISHED;
 import static android.os.AsyncTask.Status.PENDING;
 import static android.os.AsyncTask.Status.RUNNING;
+import static android.os.image.DynamicSystemClient.ACTION_HIDE_NOTIFICATION;
 import static android.os.image.DynamicSystemClient.ACTION_NOTIFY_IF_IN_USE;
 import static android.os.image.DynamicSystemClient.ACTION_START_INSTALL;
 import static android.os.image.DynamicSystemClient.CAUSE_ERROR_EXCEPTION;
@@ -27,6 +28,8 @@
 import static android.os.image.DynamicSystemClient.CAUSE_INSTALL_CANCELLED;
 import static android.os.image.DynamicSystemClient.CAUSE_INSTALL_COMPLETED;
 import static android.os.image.DynamicSystemClient.CAUSE_NOT_SPECIFIED;
+import static android.os.image.DynamicSystemClient.KEY_ENABLE_WHEN_COMPLETED;
+import static android.os.image.DynamicSystemClient.KEY_ONE_SHOT;
 import static android.os.image.DynamicSystemClient.STATUS_IN_PROGRESS;
 import static android.os.image.DynamicSystemClient.STATUS_IN_USE;
 import static android.os.image.DynamicSystemClient.STATUS_NOT_STARTED;
@@ -77,8 +80,6 @@
 
     private static final String TAG = "DynamicSystemInstallationService";
 
-    // TODO (b/131866826): This is currently for test only. Will move this to System API.
-    static final String KEY_ENABLE_WHEN_COMPLETED = "KEY_ENABLE_WHEN_COMPLETED";
     static final String KEY_DSU_SLOT = "KEY_DSU_SLOT";
     static final String DEFAULT_DSU_SLOT = "dsu";
     static final String KEY_PUBKEY = "KEY_PUBKEY";
@@ -172,6 +173,8 @@
 
     // This is for testing only now
     private boolean mEnableWhenCompleted;
+    private boolean mOneShot;
+    private boolean mHideNotification;
 
     private InstallationAsyncTask.Progress mInstallTaskProgress;
     private InstallationAsyncTask mInstallTask;
@@ -229,6 +232,8 @@
             executeRebootToNormalCommand();
         } else if (ACTION_NOTIFY_IF_IN_USE.equals(action)) {
             executeNotifyIfInUseCommand();
+        } else if (ACTION_HIDE_NOTIFICATION.equals(action)) {
+            executeHideNotificationCommand();
         }
 
         return Service.START_NOT_STICKY;
@@ -318,6 +323,7 @@
         long systemSize = intent.getLongExtra(DynamicSystemClient.KEY_SYSTEM_SIZE, 0);
         long userdataSize = intent.getLongExtra(DynamicSystemClient.KEY_USERDATA_SIZE, 0);
         mEnableWhenCompleted = intent.getBooleanExtra(KEY_ENABLE_WHEN_COMPLETED, false);
+        mOneShot = intent.getBooleanExtra(KEY_ONE_SHOT, true);
         String dsuSlot = intent.getStringExtra(KEY_DSU_SLOT);
         String publicKey = intent.getStringExtra(KEY_PUBKEY);
 
@@ -384,9 +390,9 @@
         boolean enabled = false;
 
         if (mInstallTask != null && mInstallTask.isCompleted()) {
-            enabled = mInstallTask.commit();
+            enabled = mInstallTask.commit(mOneShot);
         } else if (isDynamicSystemInstalled()) {
-            enabled = mDynSystem.setEnable(true, true);
+            enabled = mDynSystem.setEnable(true, mOneShot);
         } else {
             Log.e(TAG, "Trying to reboot to AOT while there is no complete installation");
             return;
@@ -439,12 +445,16 @@
     private void executeNotifyIfInUseCommand() {
         switch (getStatus()) {
             case STATUS_IN_USE:
-                startForeground(NOTIFICATION_ID,
-                        buildNotification(STATUS_IN_USE, CAUSE_NOT_SPECIFIED));
+                if (!mHideNotification) {
+                    startForeground(NOTIFICATION_ID,
+                            buildNotification(STATUS_IN_USE, CAUSE_NOT_SPECIFIED));
+                }
                 break;
             case STATUS_READY:
-                startForeground(NOTIFICATION_ID,
-                        buildNotification(STATUS_READY, CAUSE_NOT_SPECIFIED));
+                if (!mHideNotification) {
+                    startForeground(NOTIFICATION_ID,
+                            buildNotification(STATUS_READY, CAUSE_NOT_SPECIFIED));
+                }
                 break;
             case STATUS_IN_PROGRESS:
                 break;
@@ -454,6 +464,16 @@
         }
     }
 
+    private void executeHideNotificationCommand() {
+        mHideNotification = true;
+        switch (getStatus()) {
+            case STATUS_IN_USE:
+            case STATUS_READY:
+                stopForeground(STOP_FOREGROUND_REMOVE);
+                break;
+        }
+    }
+
     private void resetTaskAndStop() {
         resetTaskAndStop(/* removeNotification= */ false);
     }
diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java
index a41399f..42b620a 100644
--- a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java
+++ b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java
@@ -803,7 +803,7 @@
         return mIsCompleted;
     }
 
-    boolean commit() {
-        return mDynSystem.setEnable(true, true);
+    boolean commit(boolean oneShot) {
+        return mDynSystem.setEnable(true, oneShot);
     }
 }
diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/VerificationActivity.java b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/VerificationActivity.java
index 64e42cc..b522729 100644
--- a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/VerificationActivity.java
+++ b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/VerificationActivity.java
@@ -16,6 +16,8 @@
 
 package com.android.dynsystem;
 
+import static android.os.image.DynamicSystemClient.KEY_KEYGUARD_USE_DEFAULT_STRINGS;
+
 import android.app.Activity;
 import android.app.KeyguardManager;
 import android.content.Context;
@@ -47,10 +49,7 @@
         KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
 
         if (km != null) {
-            String title = getString(R.string.keyguard_title);
-            String description = getString(R.string.keyguard_description);
-            Intent intent = km.createConfirmDeviceCredentialIntent(title, description);
-
+            Intent intent = createConfirmDeviceCredentialIntent(km);
             if (intent == null) {
                 Log.d(TAG, "This device is not protected by a password/pin");
                 startInstallationService();
@@ -63,6 +62,23 @@
         }
     }
 
+    private Intent createConfirmDeviceCredentialIntent(KeyguardManager km) {
+        final boolean useDefaultStrings =
+                getIntent().getBooleanExtra(KEY_KEYGUARD_USE_DEFAULT_STRINGS, false);
+        final String title;
+        final String description;
+        if (useDefaultStrings) {
+            // Use default strings provided by keyguard manager
+            title = null;
+            description = null;
+        } else {
+            // Use custom strings provided by DSU
+            title = getString(R.string.keyguard_title);
+            description = getString(R.string.keyguard_description);
+        }
+        return km.createConfirmDeviceCredentialIntent(title, description);
+    }
+
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
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/PrintSpooler/tests/outofprocess/Android.bp b/packages/PrintSpooler/tests/outofprocess/Android.bp
index 69a1d7f..ef0d122 100644
--- a/packages/PrintSpooler/tests/outofprocess/Android.bp
+++ b/packages/PrintSpooler/tests/outofprocess/Android.bp
@@ -31,7 +31,7 @@
     libs: ["android.test.runner.stubs"],
     static_libs: [
         "androidx.test.rules",
-        "ub-uiautomator",
+        "androidx.test.uiautomator_uiautomator",
         "mockito-target-minus-junit4",
         "print-test-util-lib",
     ],
diff --git a/packages/PrintSpooler/tests/outofprocess/src/com/android/printspooler/outofprocess/tests/WorkflowTest.java b/packages/PrintSpooler/tests/outofprocess/src/com/android/printspooler/outofprocess/tests/WorkflowTest.java
index 132545b..1509b70 100644
--- a/packages/PrintSpooler/tests/outofprocess/src/com/android/printspooler/outofprocess/tests/WorkflowTest.java
+++ b/packages/PrintSpooler/tests/outofprocess/src/com/android/printspooler/outofprocess/tests/WorkflowTest.java
@@ -35,15 +35,15 @@
 import android.print.test.services.FirstPrintService;
 import android.print.test.services.PrinterDiscoverySessionCallbacks;
 import android.print.test.services.StubbablePrinterDiscoverySession;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiObjectNotFoundException;
-import android.support.test.uiautomator.UiSelector;
-import android.support.test.uiautomator.Until;
 import android.util.Log;
 
 import androidx.test.filters.LargeTest;
+import androidx.test.uiautomator.By;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.UiObject;
+import androidx.test.uiautomator.UiObjectNotFoundException;
+import androidx.test.uiautomator.UiSelector;
+import androidx.test.uiautomator.Until;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
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/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java b/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java
index 8cda376..bf24c86 100644
--- a/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java
+++ b/packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java
@@ -59,32 +59,36 @@
     public void onBindViewHolder(PreferenceViewHolder holder) {
         super.onBindViewHolder(holder);
         TextView title = holder.itemView.findViewById(android.R.id.title);
-        if (!TextUtils.isEmpty(mContentDescription)) {
+        if (title != null && !TextUtils.isEmpty(mContentDescription)) {
             title.setContentDescription(mContentDescription);
         }
 
         TextView learnMore = holder.itemView.findViewById(R.id.settingslib_learn_more);
-        if (learnMore != null && mLearnMoreListener != null) {
-            learnMore.setVisibility(View.VISIBLE);
-            if (TextUtils.isEmpty(mLearnMoreText)) {
-                mLearnMoreText = learnMore.getText();
+        if (learnMore != null) {
+            if (mLearnMoreListener != null) {
+                learnMore.setVisibility(View.VISIBLE);
+                if (TextUtils.isEmpty(mLearnMoreText)) {
+                    mLearnMoreText = learnMore.getText();
+                } else {
+                    learnMore.setText(mLearnMoreText);
+                }
+                SpannableString learnMoreText = new SpannableString(mLearnMoreText);
+                if (mLearnMoreSpan != null) {
+                    learnMoreText.removeSpan(mLearnMoreSpan);
+                }
+                mLearnMoreSpan = new FooterLearnMoreSpan(mLearnMoreListener);
+                learnMoreText.setSpan(mLearnMoreSpan, 0,
+                        learnMoreText.length(), 0);
+                learnMore.setText(learnMoreText);
             } else {
-                learnMore.setText(mLearnMoreText);
+                learnMore.setVisibility(View.GONE);
             }
-            SpannableString learnMoreText = new SpannableString(mLearnMoreText);
-            if (mLearnMoreSpan != null) {
-                learnMoreText.removeSpan(mLearnMoreSpan);
-            }
-            mLearnMoreSpan = new FooterLearnMoreSpan(mLearnMoreListener);
-            learnMoreText.setSpan(mLearnMoreSpan, 0,
-                    learnMoreText.length(), 0);
-            learnMore.setText(learnMoreText);
-        } else {
-            learnMore.setVisibility(View.GONE);
         }
 
         View icon = holder.itemView.findViewById(R.id.icon_frame);
-        icon.setVisibility(mIconVisibility);
+        if (icon != null) {
+            icon.setVisibility(mIconVisibility);
+        }
     }
 
     @Override
diff --git a/packages/SettingsLib/OWNERS b/packages/SettingsLib/OWNERS
index 1b3020a..81340f5 100644
--- a/packages/SettingsLib/OWNERS
+++ b/packages/SettingsLib/OWNERS
@@ -3,9 +3,8 @@
 edgarwang@google.com
 evanlaird@google.com
 juliacr@google.com
-lijun@google.com
-songchenxi@google.com
 yantingyang@google.com
+ykhung@google.com
 
 # Exempt resource files (because they are in a flat directory and too hard to manage via OWNERS)
 per-file *.xml=*
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/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsTab.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsTab.kt
index 30a4349..6f2c38c 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsTab.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsTab.kt
@@ -18,11 +18,11 @@
 
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Tab
 import androidx.compose.material3.Text
+import androidx.compose.material3.minimumInteractiveComponentSize
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
@@ -46,7 +46,7 @@
         selected = selected,
         onClick = onClick,
         modifier = Modifier
-            .height(48.dp)
+            .minimumInteractiveComponentSize()
             .padding(horizontal = 4.dp, vertical = 6.dp)
             .clip(SettingsShape.CornerMedium)
             .background(
diff --git a/packages/SettingsLib/res/drawable/dialog_btn_filled.xml b/packages/SettingsLib/res/drawable/dialog_btn_filled.xml
new file mode 100644
index 0000000..14cb1de9
--- /dev/null
+++ b/packages/SettingsLib/res/drawable/dialog_btn_filled.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2021 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+       xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+       android:insetTop="@dimen/dialog_button_vertical_inset"
+       android:insetBottom="@dimen/dialog_button_vertical_inset">
+    <ripple android:color="?android:attr/colorControlHighlight">
+        <item android:id="@android:id/mask">
+            <shape android:shape="rectangle">
+                <solid android:color="@android:color/white"/>
+                <corners android:radius="?android:attr/buttonCornerRadius"/>
+            </shape>
+        </item>
+        <item>
+            <shape android:shape="rectangle">
+                <corners android:radius="?android:attr/buttonCornerRadius"/>
+                <solid android:color="?androidprv:attr/colorAccentPrimary"/>
+                <padding android:left="@dimen/dialog_button_horizontal_padding"
+                         android:top="@dimen/dialog_button_vertical_padding"
+                         android:right="@dimen/dialog_button_horizontal_padding"
+                         android:bottom="@dimen/dialog_button_vertical_padding"/>
+            </shape>
+        </item>
+    </ripple>
+</inset>
diff --git a/packages/SettingsLib/res/drawable/dialog_btn_outline.xml b/packages/SettingsLib/res/drawable/dialog_btn_outline.xml
new file mode 100644
index 0000000..1e77759
--- /dev/null
+++ b/packages/SettingsLib/res/drawable/dialog_btn_outline.xml
@@ -0,0 +1,42 @@
+<?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.
+  -->
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+       xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+       android:insetTop="@dimen/dialog_button_vertical_inset"
+       android:insetBottom="@dimen/dialog_button_vertical_inset">
+    <ripple android:color="?android:attr/colorControlHighlight">
+        <item android:id="@android:id/mask">
+            <shape android:shape="rectangle">
+                <solid android:color="@android:color/white"/>
+                <corners android:radius="?android:attr/buttonCornerRadius"/>
+            </shape>
+        </item>
+        <item>
+            <shape android:shape="rectangle">
+                <corners android:radius="?android:attr/buttonCornerRadius"/>
+                <solid android:color="@android:color/transparent"/>
+                <stroke android:color="?androidprv:attr/colorAccentPrimaryVariant"
+                        android:width="1dp"
+                />
+                <padding android:left="@dimen/dialog_button_horizontal_padding"
+                         android:top="@dimen/dialog_button_vertical_padding"
+                         android:right="@dimen/dialog_button_horizontal_padding"
+                         android:bottom="@dimen/dialog_button_vertical_padding"/>
+            </shape>
+        </item>
+    </ripple>
+</inset>
diff --git a/packages/SettingsLib/res/drawable/ic_admin_panel_settings.xml b/packages/SettingsLib/res/drawable/ic_admin_panel_settings.xml
new file mode 100644
index 0000000..3ea8e9e
--- /dev/null
+++ b/packages/SettingsLib/res/drawable/ic_admin_panel_settings.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24"
+        android:viewportHeight="24"
+        android:tint="?android:attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M17,17Q17.625,17 18.062,16.562Q18.5,16.125 18.5,15.5Q18.5,14.875 18.062,14.438Q17.625,14 17,14Q16.375,14 15.938,14.438Q15.5,14.875 15.5,15.5Q15.5,16.125 15.938,16.562Q16.375,17 17,17ZM17,20Q17.775,20 18.425,19.637Q19.075,19.275 19.475,18.675Q18.925,18.35 18.3,18.175Q17.675,18 17,18Q16.325,18 15.7,18.175Q15.075,18.35 14.525,18.675Q14.925,19.275 15.575,19.637Q16.225,20 17,20ZM12,22Q8.525,21.125 6.263,18.012Q4,14.9 4,11.1V5L12,2L20,5V10.675Q19.525,10.475 19.025,10.312Q18.525,10.15 18,10.075V6.4L12,4.15L6,6.4V11.1Q6,12.275 6.312,13.45Q6.625,14.625 7.188,15.688Q7.75,16.75 8.55,17.65Q9.35,18.55 10.325,19.15Q10.6,19.95 11.05,20.675Q11.5,21.4 12.075,21.975Q12.05,21.975 12.038,21.988Q12.025,22 12,22ZM17,22Q14.925,22 13.463,20.538Q12,19.075 12,17Q12,14.925 13.463,13.462Q14.925,12 17,12Q19.075,12 20.538,13.462Q22,14.925 22,17Q22,19.075 20.538,20.538Q19.075,22 17,22ZM12,11.65Q12,11.65 12,11.65Q12,11.65 12,11.65Q12,11.65 12,11.65Q12,11.65 12,11.65Q12,11.65 12,11.65Q12,11.65 12,11.65Q12,11.65 12,11.65Q12,11.65 12,11.65Q12,11.65 12,11.65Q12,11.65 12,11.65Z"/>
+</vector>
diff --git a/packages/SettingsLib/res/layout/dialog_with_icon.xml b/packages/SettingsLib/res/layout/dialog_with_icon.xml
new file mode 100644
index 0000000..9081ca5
--- /dev/null
+++ b/packages/SettingsLib/res/layout/dialog_with_icon.xml
@@ -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.
+  -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:gravity="center"
+              android:padding="@dimen/grant_admin_dialog_padding"
+              android:paddingBottom="0dp">
+    <ImageView
+        android:id="@+id/dialog_with_icon_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:contentDescription=""/>
+    <TextView
+        android:id="@+id/dialog_with_icon_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        style="@style/DialogWithIconTitle"
+        android:text="@string/user_grant_admin_title"
+        android:textDirection="locale"/>
+    <TextView
+        android:id="@+id/dialog_with_icon_message"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="10dp"
+        android:gravity="center"
+        style="@style/TextAppearanceSmall"
+        android:text=""
+        android:textDirection="locale"/>
+    <LinearLayout
+        android:id="@+id/custom_layout"
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:paddingBottom="0dp">
+    </LinearLayout>
+    <LinearLayout
+        android:id="@+id/button_panel"
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center"
+        android:paddingBottom="0dp">
+        <Button
+            android:id="@+id/button_cancel"
+            style="@style/DialogButtonNegative"
+            android:layout_width="wrap_content"
+            android:buttonCornerRadius="28dp"
+            android:layout_height="wrap_content"
+            android:visibility="gone"/>
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="1dp"
+            android:layout_weight="1" >
+        </Space>
+        <Button
+            android:id="@+id/button_back"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            style="@style/DialogButtonNegative"
+            android:buttonCornerRadius="40dp"
+            android:clickable="true"
+            android:focusable="true"
+            android:text="Back"
+            android:visibility="gone"
+        />
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="1dp"
+            android:layout_weight="0.05"
+        >
+        </Space>
+        <Button
+            android:id="@+id/button_ok"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            style="@style/DialogButtonPositive"
+            android:clickable="true"
+            android:focusable="true"
+            android:visibility="gone"
+        />
+    </LinearLayout>
+</LinearLayout>
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‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎When you add a new user, that person needs to set up their space.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Any 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‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Any 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 &amp; 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/dimens.xml b/packages/SettingsLib/res/values/dimens.xml
index dbfd1c2..e9aded0 100644
--- a/packages/SettingsLib/res/values/dimens.xml
+++ b/packages/SettingsLib/res/values/dimens.xml
@@ -112,4 +112,13 @@
 
     <!-- Size of grant admin privileges dialog padding -->
     <dimen name="grant_admin_dialog_padding">16dp</dimen>
+
+    <dimen name="dialog_button_horizontal_padding">16dp</dimen>
+    <dimen name="dialog_button_vertical_padding">8dp</dimen>
+    <!-- The button will be 48dp tall, but the background needs to be 36dp tall -->
+    <dimen name="dialog_button_vertical_inset">6dp</dimen>
+    <dimen name="dialog_top_padding">24dp</dimen>
+    <dimen name="dialog_bottom_padding">18dp</dimen>
+    <dimen name="dialog_side_padding">24dp</dimen>
+    <dimen name="dialog_button_bar_top_padding">32dp</dimen>
 </resources>
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/res/values/styles.xml b/packages/SettingsLib/res/values/styles.xml
index cc60382..2584be7 100644
--- a/packages/SettingsLib/res/values/styles.xml
+++ b/packages/SettingsLib/res/values/styles.xml
@@ -83,4 +83,39 @@
         <item name="android:textDirection">locale</item>
         <item name="android:ellipsize">end</item>
     </style>
+
+    <style name="DialogWithIconTitle" parent="@android:TextAppearance.DeviceDefault.Headline">
+        <item name="android:textSize">@dimen/broadcast_dialog_title_text_size</item>
+        <item name="android:textColor">?android:attr/textColorPrimary</item>
+        <item name="android:textDirection">locale</item>
+        <item name="android:ellipsize">end</item>
+    </style>
+
+    <style name="DialogButtonPositive"  xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
+        <item name="android:buttonCornerRadius">0dp</item>
+        <item name="android:background">@drawable/dialog_btn_filled</item>
+        <item name="android:textColor">?androidprv:attr/textColorOnAccent</item>
+        <item name="android:textSize">14sp</item>
+        <item name="android:lineHeight">20sp</item>
+        <item name="android:fontFamily">@*android:string/config_bodyFontFamilyMedium</item>
+        <item name="android:stateListAnimator">@null</item>
+        <item name="android:minWidth">0dp</item>
+    </style>
+
+    <style name="DialogButtonNegative">
+        <item name="android:buttonCornerRadius">28dp</item>
+        <item name="android:background">@drawable/dialog_btn_outline</item>
+        <item name="android:buttonCornerRadius">28dp</item>
+        <item name="android:textColor">?android:attr/textColorPrimary</item>
+        <item name="android:textSize">14sp</item>
+        <item name="android:lineHeight">20sp</item>
+        <item name="android:fontFamily">@*android:string/config_bodyFontFamilyMedium</item>
+        <item name="android:stateListAnimator">@null</item>
+        <item name="android:minWidth">0dp</item>
+    </style>
+
+    <style name="TextStyleMessage">
+        <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
+        <item name="android:textSize">16dp</item>
+    </style>
 </resources>
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java
index e22f3f0..5fbb4c3 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java
@@ -37,8 +37,6 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -287,16 +285,7 @@
             return defaultValue;
         }
 
-        try {
-            Method method = mService.getClass().getDeclaredMethod("getDeviceSideInternal",
-                    BluetoothDevice.class);
-            method.setAccessible(true);
-            return (int) method.invoke(mService, device);
-        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
-            Log.e(TAG, "fail to get getDeviceSideInternal\n" + e.toString() + "\n"
-                    + Log.getStackTraceString(new Throwable()));
-            return defaultValue;
-        }
+        return mService.getDeviceSide(device);
     }
 
     /**
@@ -313,17 +302,7 @@
             return defaultValue;
         }
 
-        try {
-            Method method = mService.getClass().getDeclaredMethod("getDeviceModeInternal",
-                    BluetoothDevice.class);
-            method.setAccessible(true);
-            return (int) method.invoke(mService, device);
-        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
-            Log.e(TAG, "fail to get getDeviceModeInternal\n" + e.toString() + "\n"
-                    + Log.getStackTraceString(new Throwable()));
-
-            return defaultValue;
-        }
+        return mService.getDeviceMode(device);
     }
 
     public String toString() {
diff --git a/packages/SettingsLib/src/com/android/settingslib/utils/CustomDialogHelper.java b/packages/SettingsLib/src/com/android/settingslib/utils/CustomDialogHelper.java
new file mode 100644
index 0000000..de48814
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/utils/CustomDialogHelper.java
@@ -0,0 +1,277 @@
+/*
+ * 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.settingslib.utils;
+import android.annotation.IntDef;
+import android.annotation.StringRes;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.settingslib.R;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * This class is used to create custom dialog with icon, title, message and custom view that are
+ * horizontally centered.
+ */
+public class CustomDialogHelper {
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({ICON, TITLE, MESSAGE, LAYOUT, BACK_BUTTON, NEGATIVE_BUTTON, POSITIVE_BUTTON})
+    public @interface LayoutComponent {}
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({BACK_BUTTON, NEGATIVE_BUTTON, POSITIVE_BUTTON})
+    public @interface LayoutButton {}
+
+    public static final int ICON = 0;
+    public static final int TITLE = 1;
+    public static final int MESSAGE = 2;
+    public static final int LAYOUT = 3;
+    public static final int BACK_BUTTON = 4;
+    public static final int NEGATIVE_BUTTON = 5;
+    public static final int POSITIVE_BUTTON = 6;
+    private View mDialogContent;
+    private Dialog mDialog;
+    private Context mContext;
+    private LayoutInflater mLayoutInflater;
+    private ImageView mDialogIcon;
+    private TextView mDialogTitle;
+    private TextView mDialogMessage;
+    private LinearLayout mCustomLayout;
+    private Button mPositiveButton;
+    private Button mNegativeButton;
+    private Button mBackButton;
+
+    public CustomDialogHelper(Context context) {
+        mContext = context;
+        mLayoutInflater = LayoutInflater.from(context);
+        mDialogContent = mLayoutInflater.inflate(R.layout.dialog_with_icon, null);
+        mDialogIcon = mDialogContent.findViewById(R.id.dialog_with_icon_icon);
+        mDialogTitle = mDialogContent.findViewById(R.id.dialog_with_icon_title);
+        mDialogMessage = mDialogContent.findViewById(R.id.dialog_with_icon_message);
+        mCustomLayout = mDialogContent.findViewById(R.id.custom_layout);
+        mPositiveButton = mDialogContent.findViewById(R.id.button_ok);
+        mNegativeButton = mDialogContent.findViewById(R.id.button_cancel);
+        mBackButton = mDialogContent.findViewById(R.id.button_back);
+        createDialog();
+    }
+
+    /**
+     * Creates dialog with content defined in constructor.
+     */
+    private void createDialog() {
+        mDialog = new AlertDialog.Builder(mContext)
+                .setView(mDialogContent)
+                .setCancelable(true)
+                .create();
+        mDialog.getWindow()
+                .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+    }
+
+    /**
+     * Sets title and listener for positive button.
+     */
+    public CustomDialogHelper setPositiveButton(@StringRes int resid,
+            View.OnClickListener onClickListener) {
+        setButton(POSITIVE_BUTTON, resid, onClickListener);
+        return this;
+    }
+
+    /**
+     * Sets positive button text.
+     */
+    public CustomDialogHelper setPositiveButtonText(@StringRes int resid) {
+        mPositiveButton.setText(resid);
+        return this;
+    }
+
+    /**
+     * Sets title and listener for negative button.
+     */
+    public CustomDialogHelper setNegativeButton(@StringRes int resid,
+            View.OnClickListener onClickListener) {
+        setButton(NEGATIVE_BUTTON, resid, onClickListener);
+        return this;
+    }
+
+    /**
+     * Sets negative button text.
+     */
+    public CustomDialogHelper setNegativeButtonText(@StringRes int resid) {
+        mNegativeButton.setText(resid);
+        return this;
+    }
+
+    /**
+     * Sets title and listener for back button.
+     */
+    public CustomDialogHelper setBackButton(@StringRes int resid,
+            View.OnClickListener onClickListener) {
+        setButton(BACK_BUTTON, resid, onClickListener);
+        return this;
+    }
+
+    /**
+     * Sets title for back button.
+     */
+    public CustomDialogHelper setBackButtonText(@StringRes int resid) {
+        mBackButton.setText(resid);
+        return this;
+    }
+
+    private void setButton(@LayoutButton int whichButton, @StringRes int resid,
+            View.OnClickListener listener) {
+        switch (whichButton) {
+            case POSITIVE_BUTTON :
+                mPositiveButton.setText(resid);
+                mPositiveButton.setVisibility(View.VISIBLE);
+                mPositiveButton.setOnClickListener(listener);
+                break;
+            case NEGATIVE_BUTTON:
+                mNegativeButton.setText(resid);
+                mNegativeButton.setVisibility(View.VISIBLE);
+                mNegativeButton.setOnClickListener(listener);
+                break;
+            case BACK_BUTTON:
+                mBackButton.setText(resid);
+                mBackButton.setVisibility(View.VISIBLE);
+                mBackButton.setOnClickListener(listener);
+                break;
+            default:
+                break;
+        }
+    }
+
+
+    /**
+     * Modifies state of button.
+     * //TODO: modify method to allow setting state for any button.
+     */
+    public CustomDialogHelper setButtonEnabled(boolean enabled) {
+        mPositiveButton.setEnabled(enabled);
+        return this;
+    }
+
+    /**
+     * Sets title of the dialog.
+     */
+    public CustomDialogHelper setTitle(@StringRes int resid) {
+        mDialogTitle.setText(resid);
+        return this;
+    }
+
+    /**
+     * Sets message of the dialog.
+     */
+    public CustomDialogHelper setMessage(@StringRes int resid) {
+        mDialogMessage.setText(resid);
+        return this;
+    }
+
+    /**
+     * Sets icon of the dialog.
+     */
+    public CustomDialogHelper setIcon(Drawable icon) {
+        mDialogIcon.setImageDrawable(icon);
+        return this;
+    }
+
+    /**
+     * Removes all views that were previously added to the custom layout part.
+     */
+    public CustomDialogHelper clearCustomLayout() {
+        mCustomLayout.removeAllViews();
+        return this;
+    }
+
+    /**
+     * Hides custom layout.
+     */
+    public void hideCustomLayout() {
+        mCustomLayout.setVisibility(View.GONE);
+    }
+
+    /**
+     * Shows custom layout.
+     */
+    public void showCustomLayout() {
+        mCustomLayout.setVisibility(View.VISIBLE);
+    }
+
+    /**
+     * Adds view to custom layout.
+     */
+    public CustomDialogHelper addCustomView(View view) {
+        mCustomLayout.addView(view);
+        return this;
+    }
+
+    /**
+     * Returns dialog.
+     */
+    public Dialog getDialog() {
+        return mDialog;
+    }
+
+    /**
+     * Sets visibility of layout component.
+     * @param element part of the layout visibility of which is being changed.
+     * @param isVisible true if visibility is set to View.VISIBLE
+     * @return this
+     */
+    public CustomDialogHelper setVisibility(@LayoutComponent int element, boolean isVisible) {
+        int visibility;
+        if (isVisible) {
+            visibility = View.VISIBLE;
+        } else {
+            visibility = View.GONE;
+        }
+        switch (element) {
+            case ICON:
+                mDialogIcon.setVisibility(visibility);
+                break;
+            case TITLE:
+                mDialogTitle.setVisibility(visibility);
+                break;
+            case MESSAGE:
+                mDialogMessage.setVisibility(visibility);
+                break;
+            case BACK_BUTTON:
+                mBackButton.setVisibility(visibility);
+                break;
+            case NEGATIVE_BUTTON:
+                mNegativeButton.setVisibility(visibility);
+                break;
+            case POSITIVE_BUTTON:
+                mPositiveButton.setVisibility(visibility);
+                break;
+            default:
+                break;
+        }
+        return this;
+    }
+}
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/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java
index 55125c5..049c90e 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java
@@ -18,6 +18,9 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
 import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -87,4 +90,52 @@
 
         assertThat(mFooterPreference.mIconVisibility).isEqualTo(View.GONE);
     }
+
+    @Test
+    public void onBindViewHolder_whenTitleIsNull_shouldNotRaiseNpe() {
+        PreferenceViewHolder viewHolder = spy(PreferenceViewHolder.createInstanceForTests(
+                LayoutInflater.from(mContext).inflate(R.layout.preference_footer, null)));
+        when(viewHolder.findViewById(R.id.title)).thenReturn(null);
+
+        Throwable actualThrowable = null;
+        try {
+            mFooterPreference.onBindViewHolder(viewHolder);
+        } catch (Throwable throwable) {
+            actualThrowable = throwable;
+        }
+
+        assertThat(actualThrowable).isNull();
+    }
+
+    @Test
+    public void onBindViewHolder_whenLearnMoreIsNull_shouldNotRaiseNpe() {
+        PreferenceViewHolder viewHolder = spy(PreferenceViewHolder.createInstanceForTests(
+                LayoutInflater.from(mContext).inflate(R.layout.preference_footer, null)));
+        when(viewHolder.findViewById(R.id.settingslib_learn_more)).thenReturn(null);
+
+        Throwable actualThrowable = null;
+        try {
+            mFooterPreference.onBindViewHolder(viewHolder);
+        } catch (Throwable throwable) {
+            actualThrowable = throwable;
+        }
+
+        assertThat(actualThrowable).isNull();
+    }
+
+    @Test
+    public void onBindViewHolder_whenIconFrameIsNull_shouldNotRaiseNpe() {
+        PreferenceViewHolder viewHolder = spy(PreferenceViewHolder.createInstanceForTests(
+                LayoutInflater.from(mContext).inflate(R.layout.preference_footer, null)));
+        when(viewHolder.findViewById(R.id.icon_frame)).thenReturn(null);
+
+        Throwable actualThrowable = null;
+        try {
+            mFooterPreference.onBindViewHolder(viewHolder);
+        } catch (Throwable throwable) {
+            actualThrowable = throwable;
+        }
+
+        assertThat(actualThrowable).isNull();
+    }
 }
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/src/android/provider/settings/backup/SystemSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
index 6a5535d..e4cc9f1 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
@@ -100,5 +100,6 @@
         Settings.System.CAMERA_FLASH_NOTIFICATION,
         Settings.System.SCREEN_FLASH_NOTIFICATION,
         Settings.System.SCREEN_FLASH_NOTIFICATION_COLOR,
+        Settings.System.SMOOTH_DISPLAY
     };
 }
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
index 85623b2..4b72063 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
@@ -226,5 +226,6 @@
         VALIDATORS.put(System.CAMERA_FLASH_NOTIFICATION, BOOLEAN_VALIDATOR);
         VALIDATORS.put(System.SCREEN_FLASH_NOTIFICATION, BOOLEAN_VALIDATOR);
         VALIDATORS.put(System.SCREEN_FLASH_NOTIFICATION_COLOR, ANY_INTEGER_VALIDATOR);
+        VALIDATORS.put(System.SMOOTH_DISPLAY, BOOLEAN_VALIDATOR);
     }
 }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 6d375ac..48259e1 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -46,12 +46,16 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Locale;
+import java.util.Set;
 
 public class SettingsHelper {
     private static final String TAG = "SettingsHelper";
     private static final String SILENT_RINGTONE = "_silent";
     private static final String SETTINGS_REPLACED_KEY = "backup_skip_user_facing_data";
     private static final String SETTING_ORIGINAL_KEY_SUFFIX = "_original";
+    private static final String UNICODE_LOCALE_EXTENSION_FW = "fw";
+    private static final String UNICODE_LOCALE_EXTENSION_MU = "mu";
+    private static final String UNICODE_LOCALE_EXTENSION_NU = "nu";
     private static final float FLOAT_TOLERANCE = 0.01f;
 
     /** See frameworks/base/core/res/res/values/config.xml#config_longPressOnPowerBehavior **/
@@ -97,6 +101,25 @@
         sBroadcastOnRestoreSystemUI.add(Settings.Secure.QS_AUTO_ADDED_TILES);
     }
 
+    private static final ArraySet<String> UNICODE_LOCALE_SUPPORTED_EXTENSIONS = new ArraySet<>();
+
+    /**
+     * Current supported extensions are fw (first day of week) and mu (temperature unit) extension.
+     * User can set these extensions in Settings app, and it will be appended to the locale,
+     * for example: zh-Hant-TW-u-fw-mon-mu-celsius. So after the factory reset, these extensions
+     * should be restored as well because they are set by users.
+     * We do not put the nu (numbering system) extension here because it is an Android supported
+     * extension and defined in some particular locales, for example:
+     * ar-Arab-MA-u-nu-arab and ar-Arab-YE-u-nu-latn. See
+     * <code>frameworks/base/core/res/res/values/locale_config.xml</code>
+     * The nu extension should not be appended to the current/restored locale after factory reset
+     * if the current/restored locale does not have it.
+     */
+    static {
+        UNICODE_LOCALE_SUPPORTED_EXTENSIONS.add(UNICODE_LOCALE_EXTENSION_FW);
+        UNICODE_LOCALE_SUPPORTED_EXTENSIONS.add(UNICODE_LOCALE_EXTENSION_MU);
+    }
+
     private interface SettingsLookup {
         public String lookup(ContentResolver resolver, String name, int userHandle);
     }
@@ -500,20 +523,25 @@
             allLocales.put(toFullLocale(locale), locale);
         }
 
+        // After restoring to reset locales, need to get extensions from restored locale. Get the
+        // first restored locale to check its extension.
+        final Locale restoredLocale = restore.isEmpty()
+                ? Locale.ROOT
+                : restore.get(0);
         final ArrayList<Locale> filtered = new ArrayList<>(current.size());
         for (int i = 0; i < current.size(); i++) {
-            final Locale locale = current.get(i);
+            Locale locale = copyExtensionToTargetLocale(restoredLocale, current.get(i));
             allLocales.remove(toFullLocale(locale));
             filtered.add(locale);
         }
 
         for (int i = 0; i < restore.size(); i++) {
-            final Locale locale = allLocales.remove(toFullLocale(restore.get(i)));
-            if (locale != null) {
-                filtered.add(locale);
+            final Locale restoredLocaleWithExtension = copyExtensionToTargetLocale(restoredLocale,
+                    getFilteredLocale(restore.get(i), allLocales));
+            if (restoredLocaleWithExtension != null) {
+                filtered.add(restoredLocaleWithExtension);
             }
         }
-
         if (filtered.size() == current.size()) {
             return current;  // Nothing added to current locale list.
         }
@@ -521,6 +549,45 @@
         return new LocaleList(filtered.toArray(new Locale[filtered.size()]));
     }
 
+    private static Locale copyExtensionToTargetLocale(Locale restoredLocale,
+            Locale targetLocale) {
+        if (!restoredLocale.hasExtensions()) {
+            return targetLocale;
+        }
+
+        if (targetLocale == null) {
+            return null;
+        }
+
+        Locale.Builder builder = new Locale.Builder()
+                .setLocale(targetLocale);
+        Set<String> unicodeLocaleKeys = restoredLocale.getUnicodeLocaleKeys();
+        unicodeLocaleKeys.stream().forEach(key -> {
+            // Copy all supported extensions from restored locales except "nu" extension. The "nu"
+            // extension has been added in #getFilteredLocale(Locale, HashMap<Locale, Locale>)
+            // already, we don't need to add it again.
+            if (UNICODE_LOCALE_SUPPORTED_EXTENSIONS.contains(key)) {
+                builder.setUnicodeLocaleKeyword(key, restoredLocale.getUnicodeLocaleType(key));
+            }
+        });
+        return builder.build();
+    }
+
+    private static Locale getFilteredLocale(Locale restoreLocale,
+            HashMap<Locale, Locale> allLocales) {
+        Locale locale = allLocales.remove(toFullLocale(restoreLocale));
+        if (locale != null) {
+            return locale;
+        }
+
+        Locale filteredLocale = new Locale.Builder()
+                .setLocale(restoreLocale.stripExtensions())
+                .setUnicodeLocaleKeyword(UNICODE_LOCALE_EXTENSION_NU,
+                        restoreLocale.getUnicodeLocaleType(UNICODE_LOCALE_EXTENSION_NU))
+                .build();
+        return allLocales.remove(toFullLocale(filteredLocale));
+    }
+
     /**
      * Sets the locale specified. Input data is the byte representation of comma separated
      * multiple BCP-47 language tags. For backwards compatibility, strings of the form
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 284b06b..d1bd5e6 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -34,6 +34,7 @@
 
 import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME;
 import static com.android.internal.accessibility.util.AccessibilityUtils.ACCESSIBILITY_MENU_IN_SYSTEM;
+import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
 import static com.android.providers.settings.SettingsState.FALLBACK_FILE_SUFFIX;
 import static com.android.providers.settings.SettingsState.getTypeFromKey;
 import static com.android.providers.settings.SettingsState.getUserIdFromKey;
@@ -3748,7 +3749,7 @@
         }
 
         private final class UpgradeController {
-            private static final int SETTINGS_VERSION = 218;
+            private static final int SETTINGS_VERSION = 219;
 
             private final int mUserId;
 
@@ -5673,7 +5674,7 @@
                             providers.addAll(Arrays.asList(resources.getStringArray(resourceId)));
                         } catch (Resources.NotFoundException e) {
                             Slog.w(LOG_TAG,
-                                "Get default array Cred Provider not found: " + e.toString());
+                                    "Get default array Cred Provider not found: " + e.toString());
                         }
                         try {
                             final String storedValue = resources.getString(resourceId);
@@ -5682,7 +5683,7 @@
                             }
                         } catch (Resources.NotFoundException e) {
                             Slog.w(LOG_TAG,
-                                "Get default Cred Provider not found: " + e.toString());
+                                    "Get default Cred Provider not found: " + e.toString());
                         }
 
                         if (!providers.isEmpty()) {
@@ -5731,8 +5732,8 @@
                     final Setting currentSetting = secureSettings
                             .getSettingLocked(Settings.Secure.CREDENTIAL_SERVICE);
                     if (currentSetting.isNull()) {
-                        final int resourceId =
-                            com.android.internal.R.array.config_defaultCredentialProviderService;
+                        final int resourceId = com.android.internal.R.array
+                                .config_defaultCredentialProviderService;
                         final Resources resources = getContext().getResources();
                         // If the config has not be defined we might get an exception.
                         final List<String> providers = new ArrayList<>();
@@ -5740,7 +5741,7 @@
                             providers.addAll(Arrays.asList(resources.getStringArray(resourceId)));
                         } catch (Resources.NotFoundException e) {
                             Slog.w(LOG_TAG,
-                                "Get default array Cred Provider not found: " + e.toString());
+                                    "Get default array Cred Provider not found: " + e.toString());
                         }
 
                         if (!providers.isEmpty()) {
@@ -5839,6 +5840,47 @@
                     currentVersion = 218;
                 }
 
+                // v218: Convert Smooth Display and Force Peak Refresh Rate to a boolean
+                if (currentVersion == 218) {
+                    final String peakRefreshRateSettingName = "peak_refresh_rate";
+                    final String minRefreshRateSettingName = "min_refresh_rate";
+
+                    final SettingsState systemSettings = getSystemSettingsLocked(userId);
+                    final Setting peakRefreshRateSetting =
+                            systemSettings.getSettingLocked(peakRefreshRateSettingName);
+                    final Setting minRefreshRateSetting =
+                            systemSettings.getSettingLocked(minRefreshRateSettingName);
+
+                    float peakRefreshRate = DEFAULT_REFRESH_RATE;
+                    float minRefreshRate = 0;
+                    try {
+                        if (!peakRefreshRateSetting.isNull()) {
+                            peakRefreshRate = Float.parseFloat(peakRefreshRateSetting.getValue());
+                        }
+                    } catch (NumberFormatException e) {
+                        // Do nothing. Overwrite with default value.
+                    }
+                    try {
+                        if (!minRefreshRateSetting.isNull()) {
+                            minRefreshRate = Float.parseFloat(minRefreshRateSetting.getValue());
+                        }
+                    } catch (NumberFormatException e) {
+                        // Do nothing. Overwrite with default value.
+                    }
+
+                    systemSettings.deleteSettingLocked(peakRefreshRateSettingName);
+                    systemSettings.deleteSettingLocked(minRefreshRateSettingName);
+
+                    systemSettings.insertSettingLocked(Settings.System.SMOOTH_DISPLAY,
+                            peakRefreshRate > DEFAULT_REFRESH_RATE ? "1" : "0", /* tag= */ null,
+                            /* makeDefault= */ false, SettingsState.SYSTEM_PACKAGE_NAME);
+                    systemSettings.insertSettingLocked(Settings.System.FORCE_PEAK_REFRESH_RATE,
+                            minRefreshRate > 0 ? "1" : "0", /* tag= */ null,
+                            /* makeDefault= */ false, SettingsState.SYSTEM_PACKAGE_NAME);
+
+                    currentVersion = 219;
+                }
+
                 // vXXX: Add new settings above this point.
 
                 if (currentVersion != newVersion) {
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..36aa2ac 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -97,8 +97,7 @@
                     Settings.System.WHEN_TO_MAKE_WIFI_CALLS, // bug?
                     Settings.System.WINDOW_ORIENTATION_LISTENER_LOG, // used for debugging only
                     Settings.System.DESKTOP_MODE, // developer setting for internal prototyping
-                    Settings.System.MIN_REFRESH_RATE, // depends on hardware capabilities
-                    Settings.System.PEAK_REFRESH_RATE, // depends on hardware capabilities
+                    Settings.System.FORCE_PEAK_REFRESH_RATE, // depends on hardware capabilities
                     Settings.System.SCREEN_BRIGHTNESS_FLOAT,
                     Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ,
                     Settings.System.MULTI_AUDIO_FOCUS_ENABLED // form-factor/OEM specific
@@ -449,6 +448,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/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
index ee76dbf..bc81c44 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
@@ -299,12 +299,42 @@
                         LocaleList.forLanguageTags("en-US"),  // current
                         new String[] { "en-US", "zh-Hans-CN" }));  // supported
 
-        // Old langauge code should be updated.
+        // Old language code should be updated.
         assertEquals(LocaleList.forLanguageTags("en-US,he-IL,id-ID,yi"),
                 SettingsHelper.resolveLocales(
                         LocaleList.forLanguageTags("iw-IL,in-ID,ji"),  // restore
                         LocaleList.forLanguageTags("en-US"),  // current
                         new String[] { "he-IL", "id-ID", "yi" }));  // supported
+
+        // No matter the current locale has "nu" extension or not, if the restored locale has fw
+        // (first day of week) or mu(temperature unit) extension, we should restore fw or mu
+        // extensions as well and append these to restore and current locales.
+        assertEquals(LocaleList.forLanguageTags(
+                "en-US-u-fw-mon-mu-celsius,zh-Hant-TW-u-fw-mon-mu-celsius"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("zh-Hant-TW-u-fw-mon-mu-celsius"),  // restore
+                        LocaleList.forLanguageTags("en-US"),  // current
+                        new String[] { "en-US", "zh-Hant-TW" }));  // supported
+
+        // No matter the current locale has "nu" extension or not, if the restored locale has fw
+        // (first day of week) or mu(temperature unit) extension, we should restore fw or mu
+        // extensions as well and append these to restore and current locales.
+        assertEquals(LocaleList.forLanguageTags(
+                "fa-Arab-AF-u-nu-latn-fw-mon-mu-celsius,zh-Hant-TW-u-fw-mon-mu-celsius"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("zh-Hant-TW-u-fw-mon-mu-celsius"),  // restore
+                        LocaleList.forLanguageTags("fa-Arab-AF-u-nu-latn"),  // current
+                        new String[] { "fa-Arab-AF-u-nu-latn", "zh-Hant-TW" }));  // supported
+
+        // If the restored locale only has nu extension, we should not restore the nu extensions to
+        // current locales.
+        assertEquals(LocaleList.forLanguageTags("zh-Hant-TW,fa-Arab-AF-u-nu-latn"),
+                SettingsHelper.resolveLocales(
+                        LocaleList.forLanguageTags("fa-Arab-AF-u-nu-latn"),  // restore
+                        LocaleList.forLanguageTags("zh-Hant-TW"),  // current
+                        new String[] { "fa-Arab-AF-u-nu-latn", "zh-Hant-TW" }));  // supported
+
+
     }
 
     @Test
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index fedfb43..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" />
@@ -58,7 +60,6 @@
     <uses-permission android:name="android.permission.ACCEPT_HANDOVER" />
     <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
     <uses-permission android:name="android.permission.BODY_SENSORS" />
-    <uses-permission android:name="android.permission.BODY_SENSORS_WRIST_TEMPERATURE" />
     <uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" />
     <uses-permission android:name="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS" />
     <uses-permission android:name="android.permission.GET_PROCESS_STATE_AND_OOM_SCORE" />
@@ -635,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..865b0df 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -173,6 +173,7 @@
         "androidx.palette_palette",
         "androidx.legacy_legacy-preference-v14",
         "androidx.leanback_leanback",
+        "androidx.tracing_tracing",
         "androidx.slice_slice-core",
         "androidx.slice_slice-view",
         "androidx.slice_slice-builders",
@@ -243,15 +244,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 +256,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 +418,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/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index dabb578..4652ef1 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -380,6 +380,9 @@
         <service android:name="SystemUIService"
             android:exported="true"
         />
+        <service android:name=".wallet.controller.WalletContextualLocationsService"
+            android:exported="true"
+            />
 
         <!-- Service for dumping extremely verbose content during a bug report -->
         <service android:name=".dump.SystemUIAuxiliaryDumpService"
@@ -979,12 +982,20 @@
             </intent-filter>
         </activity>
 
+        <service android:name=".notetask.NoteTaskControllerUpdateService" />
+
         <activity
             android:name=".notetask.shortcut.LaunchNoteTaskActivity"
             android:exported="true"
             android:excludeFromRecents="true"
             android:resizeableActivity="false"
-            android:theme="@android:style/Theme.NoDisplay" />
+            android:theme="@android:style/Theme.NoDisplay" >
+
+            <intent-filter>
+                <action android:name="com.android.systemui.action.LAUNCH_NOTE_TASK"/>
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
 
         <!-- LaunchNoteTaskManagedProfileProxyActivity MUST NOT be exported because it allows caller
              to specify an Android user when launching the default notes app. -->
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">"Schnell­einstellungen"</string>
-    <string name="notifications_label" msgid="6829741046963013567">"Benach­richtigungen"</string>
+    <string name="quick_settings_label" msgid="2999117381487601865">"Schnell­­­ein­­stel­lungen"</string>
+    <string name="notifications_label" msgid="6829741046963013567">"Benach­­rich­ti­gungen"</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-&amp;#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/FontInterpolator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt
index f0a8211..83e44b6 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt
@@ -18,8 +18,10 @@
 
 import android.graphics.fonts.Font
 import android.graphics.fonts.FontVariationAxis
+import android.util.LruCache
 import android.util.MathUtils
 import android.util.MathUtils.abs
+import androidx.annotation.VisibleForTesting
 import java.lang.Float.max
 import java.lang.Float.min
 
@@ -34,6 +36,10 @@
 private const val FONT_ITALIC_ANIMATION_STEP = 0.1f
 private const val FONT_ITALIC_DEFAULT_VALUE = 0f
 
+// Benchmarked via Perfetto, difference between 10 and 50 entries is about 0.3ms in
+// frame draw time on a Pixel 6.
+@VisibleForTesting const val FONT_CACHE_MAX_ENTRIES = 10
+
 /** Provide interpolation of two fonts by adjusting font variation settings. */
 class FontInterpolator {
 
@@ -81,8 +87,8 @@
     // Font interpolator has two level caches: one for input and one for font with different
     // variation settings. No synchronization is needed since FontInterpolator is not designed to be
     // thread-safe and can be used only on UI thread.
-    private val interpCache = hashMapOf<InterpKey, Font>()
-    private val verFontCache = hashMapOf<VarFontKey, Font>()
+    private val interpCache = LruCache<InterpKey, Font>(FONT_CACHE_MAX_ENTRIES)
+    private val verFontCache = LruCache<VarFontKey, Font>(FONT_CACHE_MAX_ENTRIES)
 
     // Mutable keys for recycling.
     private val tmpInterpKey = InterpKey(null, null, 0f)
@@ -152,7 +158,7 @@
         tmpVarFontKey.set(start, newAxes)
         val axesCachedFont = verFontCache[tmpVarFontKey]
         if (axesCachedFont != null) {
-            interpCache[InterpKey(start, end, progress)] = axesCachedFont
+            interpCache.put(InterpKey(start, end, progress), axesCachedFont)
             return axesCachedFont
         }
 
@@ -160,8 +166,8 @@
         // Font.Builder#build won't throw IOException since creating fonts from existing fonts will
         // not do any IO work.
         val newFont = Font.Builder(start).setFontVariationSettings(newAxes.toTypedArray()).build()
-        interpCache[InterpKey(start, end, progress)] = newFont
-        verFontCache[VarFontKey(start, newAxes)] = newFont
+        interpCache.put(InterpKey(start, end, progress), newFont)
+        verFontCache.put(VarFontKey(start, newAxes), newFont)
         return newFont
     }
 
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/TextAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/TextAnimator.kt
index 9e9929e..3ee97be 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/TextAnimator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/TextAnimator.kt
@@ -24,8 +24,10 @@
 import android.graphics.Typeface
 import android.graphics.fonts.Font
 import android.text.Layout
+import android.util.LruCache
 
 private const val DEFAULT_ANIMATION_DURATION: Long = 300
+private const val TYPEFACE_CACHE_MAX_ENTRIES = 5
 
 typealias GlyphCallback = (TextAnimator.PositionedGlyph, Float) -> Unit
 /**
@@ -114,7 +116,7 @@
 
     private val fontVariationUtils = FontVariationUtils()
 
-    private val typefaceCache = HashMap<String, Typeface?>()
+    private val typefaceCache = LruCache<String, Typeface>(TYPEFACE_CACHE_MAX_ENTRIES)
 
     fun updateLayout(layout: Layout) {
         textInterpolator.layout = layout
@@ -218,12 +220,12 @@
         }
 
         if (!fvar.isNullOrBlank()) {
-            textInterpolator.targetPaint.typeface =
-                typefaceCache.getOrElse(fvar) {
-                    textInterpolator.targetPaint.fontVariationSettings = fvar
+            textInterpolator.targetPaint.typeface = typefaceCache.get(fvar) ?: run {
+                textInterpolator.targetPaint.fontVariationSettings = fvar
+                textInterpolator.targetPaint.typeface?.also {
                     typefaceCache.put(fvar, textInterpolator.targetPaint.typeface)
-                    textInterpolator.targetPaint.typeface
                 }
+            }
         }
 
         if (color != null) {
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/src/com/android/internal/systemui/lint/SystemUIIssueRegistry.kt b/packages/SystemUI/checks/src/com/android/internal/systemui/lint/SystemUIIssueRegistry.kt
index 387b67d..520c888 100644
--- a/packages/SystemUI/checks/src/com/android/internal/systemui/lint/SystemUIIssueRegistry.kt
+++ b/packages/SystemUI/checks/src/com/android/internal/systemui/lint/SystemUIIssueRegistry.kt
@@ -40,7 +40,8 @@
                 SoftwareBitmapDetector.ISSUE,
                 NonInjectedServiceDetector.ISSUE,
                 StaticSettingsProviderDetector.ISSUE,
-                DemotingTestWithoutBugDetector.ISSUE
+                DemotingTestWithoutBugDetector.ISSUE,
+                TestFunctionNameViolationDetector.ISSUE,
             )
 
     override val api: Int
diff --git a/packages/SystemUI/checks/src/com/android/internal/systemui/lint/TestFunctionNameViolationDetector.kt b/packages/SystemUI/checks/src/com/android/internal/systemui/lint/TestFunctionNameViolationDetector.kt
new file mode 100644
index 0000000..d91c7e5
--- /dev/null
+++ b/packages/SystemUI/checks/src/com/android/internal/systemui/lint/TestFunctionNameViolationDetector.kt
@@ -0,0 +1,89 @@
+/*
+ * 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.systemui.lint
+
+import com.android.tools.lint.detector.api.AnnotationInfo
+import com.android.tools.lint.detector.api.AnnotationUsageInfo
+import com.android.tools.lint.detector.api.AnnotationUsageType
+import com.android.tools.lint.detector.api.Category
+import com.android.tools.lint.detector.api.Detector
+import com.android.tools.lint.detector.api.Implementation
+import com.android.tools.lint.detector.api.Issue
+import com.android.tools.lint.detector.api.JavaContext
+import com.android.tools.lint.detector.api.Scope
+import com.android.tools.lint.detector.api.Severity
+import com.android.tools.lint.detector.api.SourceCodeScanner
+import org.jetbrains.uast.UElement
+import org.jetbrains.uast.getParentOfType
+import org.jetbrains.uast.kotlin.KotlinUAnnotation
+import org.jetbrains.uast.kotlin.KotlinUMethod
+
+/**
+ * Detects test function naming violations regarding use of the backtick-wrapped space-allowed
+ * feature of Kotlin functions.
+ */
+class TestFunctionNameViolationDetector : Detector(), SourceCodeScanner {
+
+    override fun applicableAnnotations(): List<String> = listOf(ANNOTATION)
+    override fun isApplicableAnnotationUsage(type: AnnotationUsageType): Boolean = true
+
+    @Suppress("UnstableApiUsage")
+    override fun visitAnnotationUsage(
+        context: JavaContext,
+        element: UElement,
+        annotationInfo: AnnotationInfo,
+        usageInfo: AnnotationUsageInfo,
+    ) {
+        (element as? KotlinUAnnotation)?.getParentOfType(KotlinUMethod::class.java)?.let { method ->
+            if (method.name.contains(" ")) {
+                context.report(
+                    issue = ISSUE,
+                    scope = method.nameIdentifier,
+                    location = context.getLocation(method.nameIdentifier),
+                    message =
+                        "Spaces are not allowed in test names. Use pascalCase_withUnderScores" +
+                            " instead.",
+                )
+            }
+        }
+    }
+
+    companion object {
+        private const val ANNOTATION = "org.junit.Test"
+
+        @JvmStatic
+        val ISSUE =
+            Issue.create(
+                id = "TestFunctionNameViolation",
+                briefDescription = "Spaces not allowed in test function names.",
+                explanation =
+                    """
+                    We don't allow test function names because it leads to issues with our test
+                    harness system (for example, see b/277739595). Please use
+                    pascalCase_withUnderScores instead.
+                """,
+                category = Category.TESTING,
+                priority = 8,
+                severity = Severity.FATAL,
+                implementation =
+                    Implementation(
+                        TestFunctionNameViolationDetector::class.java,
+                        Scope.JAVA_FILE_SCOPE,
+                    ),
+            )
+    }
+}
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/checks/tests/com/android/internal/systemui/lint/TestFunctionNameViolationDetectorTest.kt b/packages/SystemUI/checks/tests/com/android/internal/systemui/lint/TestFunctionNameViolationDetectorTest.kt
new file mode 100644
index 0000000..db73154
--- /dev/null
+++ b/packages/SystemUI/checks/tests/com/android/internal/systemui/lint/TestFunctionNameViolationDetectorTest.kt
@@ -0,0 +1,103 @@
+/*
+ * 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.systemui.lint
+
+import com.android.tools.lint.checks.infrastructure.TestFile
+import com.android.tools.lint.detector.api.Detector
+import com.android.tools.lint.detector.api.Issue
+import org.junit.Test
+
+@Suppress("UnstableApiUsage")
+class TestFunctionNameViolationDetectorTest : SystemUILintDetectorTest() {
+    override fun getDetector(): Detector {
+        return TestFunctionNameViolationDetector()
+    }
+
+    override fun getIssues(): List<Issue> {
+        return listOf(
+            TestFunctionNameViolationDetector.ISSUE,
+        )
+    }
+
+    @Test
+    fun violations() {
+        lint()
+            .files(
+                kotlin(
+                    """
+                    package test.pkg.name
+
+                    import org.junit.Test
+
+                    class MyTest {
+                        @Test
+                        fun `illegal test name - violation should be detected`() {
+                            // some test code here.
+                        }
+
+                        @Test
+                        fun legitimateTestName_doesNotViolate() {
+                            // some test code here.
+                        }
+
+                        fun helperFunction_doesNotViolate() {
+                            // some code.
+                        }
+
+                        fun `helper function - does not violate`() {
+                            // some code.
+                        }
+                    }
+                """
+                        .trimIndent()
+                ),
+                testAnnotationStub,
+            )
+            .issues(
+                TestFunctionNameViolationDetector.ISSUE,
+            )
+            .run()
+            .expectWarningCount(0)
+            .expect(
+                """
+                src/test/pkg/name/MyTest.kt:7: Error: Spaces are not allowed in test names. Use pascalCase_withUnderScores instead. [TestFunctionNameViolation]
+                    fun `illegal test name - violation should be detected`() {
+                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                1 errors, 0 warnings
+                """
+            )
+    }
+
+    companion object {
+        private val testAnnotationStub: TestFile =
+            kotlin(
+                """
+                package org.junit
+
+                import java.lang.annotation.ElementType
+                import java.lang.annotation.Retention
+                import java.lang.annotation.RetentionPolicy
+                import java.lang.annotation.Target
+
+                @Retention(RetentionPolicy.RUNTIME)
+                @Target({ElementType.METHOD})
+                annotation class Test
+            """
+            )
+    }
+}
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/AnimatableClockView.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
index 86bd5f2..9d1dd1b 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
@@ -648,7 +648,7 @@
         private const val DIGITS_PER_LINE = 2
 
         // How much of "fraction" to spend on canceling the animation, if needed
-        private const val ANIMATION_CANCELLATION_TIME = 0.4f
+        private const val ANIMATION_CANCELLATION_TIME = 0f
 
         // Delays. Each digit's animation should have a slight delay, so we get a nice
         // "stepping" effect. When moving right, the second digit of the hour should move first.
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 a7e95b5..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,14 +32,20 @@
 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
 import java.util.concurrent.atomic.AtomicBoolean
 import kotlinx.coroutines.CoroutineDispatcher
 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(
@@ -54,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,
@@ -65,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 {
@@ -112,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
                     }
@@ -137,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
                     }
@@ -210,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
@@ -239,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
     }
@@ -399,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" }
+            )
         }
     }
 
@@ -465,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" }
+                )
             }
         }
 
@@ -485,6 +546,14 @@
         return availableClocks[targetClockId]?.provider?.createClock(settings)
     }
 
+    fun dump(pw: PrintWriter, args: Array<out String>) {
+        pw.println("ClockRegistry:")
+        pw.println("  settings = $settings")
+        for ((id, info) in availableClocks) {
+            pw.println("  availableClocks[$id] = $info")
+        }
+    }
+
     private data class ClockInfo(
         val metadata: ClockMetadata,
         var provider: ClockProvider?,
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..3fda83d 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,47 @@
 
         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)
             }
         }
 
+        override fun onPickerCarouselSwiping(swipingFraction: Float, previewRatio: Float) {
+            // TODO(b/278936436): refactor this part when we change recomputePadding
+            // when on the side, swipingFraction = 0, translationY should offset
+            // the top margin change in recomputePadding to make clock be centered
+            view.translationY = 0.5f * view.bottom * (1 - swipingFraction)
+        }
+    }
+
+    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 322fc77..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,12 +194,8 @@
 
 /** 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,
 
     /** True if the clock will react to tone changes in the seed color. */
     val isReactiveToTone: Boolean = true,
@@ -210,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/plugin/src/com/android/systemui/plugins/WeatherData.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/WeatherData.kt
index f71c137..2dd146c5 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/WeatherData.kt
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/WeatherData.kt
@@ -47,6 +47,7 @@
             }
     }
 
+    // Values for WeatherStateIcon must stay in sync with go/g3-WeatherStateIcon
     enum class WeatherStateIcon(val id: Int) {
         UNKNOWN_ICON(0),
 
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/log/LogBuffer.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/log/LogBuffer.kt
index 4a6e0b6..0a7ccc5 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/log/LogBuffer.kt
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/log/LogBuffer.kt
@@ -253,8 +253,8 @@
     @Synchronized
     fun unfreeze() {
         if (frozen) {
-            log(TAG, LogLevel.DEBUG, { str1 = name }, { "$str1 unfrozen" })
             frozen = false
+            log(TAG, LogLevel.DEBUG, { str1 = name }, { "$str1 unfrozen" })
         }
     }
 
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">"Vliegtuig­modus"</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/drawable/chipbar_background.xml b/packages/SystemUI/res/drawable/chipbar_background.xml
index 5722177..7530f5b 100644
--- a/packages/SystemUI/res/drawable/chipbar_background.xml
+++ b/packages/SystemUI/res/drawable/chipbar_background.xml
@@ -17,6 +17,6 @@
 <shape
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
-    <solid android:color="?androidprv:attr/colorAccentSecondary" />
+    <solid android:color="?androidprv:attr/materialColorSecondaryFixed" />
     <corners android:radius="32dp" />
 </shape>
diff --git a/packages/SystemUI/res/drawable/chipbar_end_button_background.xml b/packages/SystemUI/res/drawable/chipbar_end_button_background.xml
index 80c7207..a3832ee 100644
--- a/packages/SystemUI/res/drawable/chipbar_end_button_background.xml
+++ b/packages/SystemUI/res/drawable/chipbar_end_button_background.xml
@@ -20,7 +20,7 @@
     android:color="?android:textColorPrimary">
     <item android:id="@android:id/background">
         <shape>
-            <solid android:color="@android:color/system_accent1_200"/>
+            <solid android:color="?androidprv:attr/materialColorPrimaryFixedDim"/>
             <corners android:radius="24dp" />
         </shape>
     </item>
diff --git a/packages/SystemUI/res/drawable/hearing.xml b/packages/SystemUI/res/drawable/hearing.xml
new file mode 100644
index 0000000..02f5f92
--- /dev/null
+++ b/packages/SystemUI/res/drawable/hearing.xml
@@ -0,0 +1,24 @@
+<!-- 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="48dp"
+    android:height="48dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48"
+    android:tint="?attr/colorControlNormal">
+  <path
+      android:fillColor="@android:color/white"
+      android:pathData="M34.4,43.95Q31.55,43.95 29.45,42.4Q27.35,40.85 26.35,38.3Q25.35,35.75 24.375,34.325Q23.4,32.9 20.7,30.75Q17.4,28.1 15.95,25.1Q14.5,22.1 14.5,17.8Q14.5,11.8 18.3,7.975Q22.1,4.15 28.1,4.15Q34,4.15 37.875,7.825Q41.75,11.5 42,17.2H39Q38.75,12.8 35.725,9.975Q32.7,7.15 28.1,7.15Q23.6,7.15 20.55,10.225Q17.5,13.3 17.5,17.8Q17.5,21.4 18.9,24.025Q20.3,26.65 23.55,29.1Q25.5,30.55 26.675,32.25Q27.85,33.95 28.9,36.45Q29.75,38.55 31.125,39.75Q32.5,40.95 34.4,40.95Q36.15,40.95 37.425,39.75Q38.7,38.55 38.95,36.8H41.95Q41.7,39.8 39.55,41.875Q37.4,43.95 34.4,43.95ZM11.95,32.9Q9.1,29.75 7.55,25.825Q6,21.9 6,17.6Q6,13.35 7.475,9.375Q8.95,5.4 11.95,2.35L14.2,4.35Q11.6,7 10.3,10.425Q9,13.85 9,17.6Q9,21.3 10.325,24.725Q11.65,28.15 14.2,30.85ZM28.1,22.45Q26.15,22.45 24.8,21.1Q23.45,19.75 23.45,17.8Q23.45,15.85 24.8,14.45Q26.15,13.05 28.1,13.05Q30.05,13.05 31.45,14.45Q32.85,15.85 32.85,17.8Q32.85,19.75 31.45,21.1Q30.05,22.45 28.1,22.45Z"/>
+</vector>
diff --git a/packages/SystemUI/res/layout/chipbar.xml b/packages/SystemUI/res/layout/chipbar.xml
index 762dcdc..8fa975b 100644
--- a/packages/SystemUI/res/layout/chipbar.xml
+++ b/packages/SystemUI/res/layout/chipbar.xml
@@ -49,15 +49,17 @@
             android:alpha="0.0"
             />
 
+        <!-- LINT.IfChange textColor -->
         <TextView
             android:id="@+id/text"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:textSize="@dimen/chipbar_text_size"
-            android:textColor="@color/chipbar_text_and_icon_color"
+            style="@style/Chipbar.Text"
+            android:textColor="?androidprv:attr/materialColorOnSecondaryFixed"
             android:alpha="0.0"
             />
+        <!-- LINT.ThenChange(systemui.temporarydisplay.chipbar.ChipbarInfo.kt) -->
 
         <!-- At most one of [loading, failure_icon, undo] will be visible at a time. -->
         <ImageView
@@ -66,7 +68,7 @@
             android:layout_height="@dimen/chipbar_end_icon_size"
             android:layout_marginStart="@dimen/chipbar_end_item_start_margin"
             android:src="@drawable/ic_progress_activity"
-            android:tint="@android:color/system_accent2_700"
+            android:tint="?androidprv:attr/materialColorOnSecondaryFixedVariant"
             android:alpha="0.0"
             />
 
@@ -84,9 +86,9 @@
             android:id="@+id/end_button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textColor="?androidprv:attr/textColorOnAccent"
             android:layout_marginStart="@dimen/chipbar_end_item_start_margin"
-            android:textSize="@dimen/chipbar_text_size"
+            style="@style/Chipbar.Text"
+            android:textColor="?androidprv:attr/materialColorOnPrimaryFixed"
             android:paddingStart="@dimen/chipbar_outer_padding"
             android:paddingEnd="@dimen/chipbar_outer_padding"
             android:paddingTop="@dimen/chipbar_end_button_vertical_padding"
diff --git a/packages/SystemUI/res/layout/controls_more_item.xml b/packages/SystemUI/res/layout/controls_more_item.xml
index da9c43c..73d1c54 100644
--- a/packages/SystemUI/res/layout/controls_more_item.xml
+++ b/packages/SystemUI/res/layout/controls_more_item.xml
@@ -13,13 +13,17 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/controls_more_item_text"
     style="@style/Control.MenuItem"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_gravity="start"
+    android:layout_height="@dimen/control_menu_item_height"
+    android:layout_gravity="center_vertical"
+    android:background="@drawable/controls_popup_item_background"
     android:paddingStart="@dimen/control_menu_horizontal_padding"
     android:paddingEnd="@dimen/control_menu_horizontal_padding"
-    android:textDirection="locale"/>
-
+    android:textDirection="locale"
+    android:textSize="@dimen/control_item_text_size"
+    tools:fontFamily="@null"
+    tools:text="@tools:sample/lorem/random" />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/controls_spinner_item.xml b/packages/SystemUI/res/layout/controls_spinner_item.xml
index 4048d03..8119651 100644
--- a/packages/SystemUI/res/layout/controls_spinner_item.xml
+++ b/packages/SystemUI/res/layout/controls_spinner_item.xml
@@ -16,18 +16,18 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="@dimen/control_popup_item_height"
+    android:layout_height="@dimen/control_apps_popup_item_height"
     android:background="@drawable/controls_popup_item_background"
     android:gravity="center_vertical|start"
     android:orientation="horizontal"
-    android:paddingStart="@dimen/control_popup_item_padding"
-    android:paddingEnd="@dimen/control_popup_item_padding">
+    android:paddingStart="@dimen/control_menu_horizontal_padding"
+    android:paddingEnd="@dimen/control_menu_horizontal_padding">
 
   <ImageView
       android:id="@+id/app_icon"
       android:layout_width="@dimen/controls_header_app_icon_size"
       android:layout_height="@dimen/controls_header_app_icon_size"
-      android:layout_marginEnd="@dimen/control_popup_item_padding"
+      android:layout_marginEnd="@dimen/control_menu_horizontal_padding"
       android:contentDescription="@null"
       tools:src="@drawable/ic_android" />
 
diff --git a/packages/SystemUI/res/layout/notification_snooze.xml b/packages/SystemUI/res/layout/notification_snooze.xml
index 11ec025..8b53680 100644
--- a/packages/SystemUI/res/layout/notification_snooze.xml
+++ b/packages/SystemUI/res/layout/notification_snooze.xml
@@ -21,6 +21,8 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
+    android:paddingTop="2dp"
+    android:paddingBottom="2dp"
     android:background="?androidprv:attr/colorSurface"
     android:theme="@style/Theme.SystemUI">
 
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/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml
index 64aa629..331307a0 100644
--- a/packages/SystemUI/res/layout/status_bar.xml
+++ b/packages/SystemUI/res/layout/status_bar.xml
@@ -44,6 +44,8 @@
     <LinearLayout android:id="@+id/status_bar_contents"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:clipChildren="false"
+        android:clipToPadding="false"
         android:paddingStart="@dimen/status_bar_padding_start"
         android:paddingEnd="@dimen/status_bar_padding_end"
         android:paddingTop="@dimen/status_bar_padding_top"
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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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">"àČ§àłàČ”àČšàČż &amp; àČ”àłˆàČŹàłàČ°àł‡àČ·àČšàł"</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">"êž°êž° ë§ˆìŽíŹë„Œ &amp;#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 &amp; 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 &amp; 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 &amp; 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 &amp; 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">"àź’àźČàźż &amp; àź…àź€àźżàź°àŻàź”àŻ"</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">"à°žà±Œà°‚à°Ąà± &amp; à°”à±ˆà°Źà±à°°à±‡à°·à°šà±"</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">"à°Šà±€à°šà°ż à°”à°Čà°š à°źà±€à°°à± అచ్‌à°Șà°żà°šà± చేఞే ఔరకు à°‡à°Šà°ż à°”à±€à°•à±à°·à°Łà°Čో à°‰à°‚à°šà°Źà°Ąà±à°€à±à°‚à°Šà°ż. అచ్‌à°Șà°żà°šà± à°šà±‡à°Żà°Ąà°Ÿà°šà°żà°•à°ż ఔెచుకకు à°źà°°à°żà°Żà± ఞ్ఄూà°Čà°Šà±ƒà°·à±à°Ÿà°ż à°€à°Ÿà°•à°ż &amp; అà°Čటగే à°Șà°Ÿà±à°Ÿà±à°•à±‹à°‚à°Ąà°ż."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"à°Šà±€à°šà°ż à°”à°Čà°š à°źà±€à°°à± అచ్‌à°Șà°żà°šà± చేఞే ఔరకు à°‡à°Šà°ż à°”à±€à°•à±à°·à°Łà°Čో à°‰à°‚à°šà°Źà°Ąà±à°€à±à°‚à°Šà°ż. అచ్‌à°Șà°żà°šà± à°šà±‡à°Żà°Ąà°Ÿà°šà°żà°•à°ż ఔెచుకకు à°źà°°à°żà°Żà± à°čà±‹à°źà±‌à°šà°ż à°€à°Ÿà°•à°ż &amp; అà°Čటగే à°Șà°Ÿà±à°Ÿà±à°•à±‹à°‚à°Ąà°ż."</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/colors.xml b/packages/SystemUI/res/values/colors.xml
index 96e6d4e..cb8c2a7 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -231,9 +231,6 @@
 
     <color name="people_tile_background">@color/material_dynamic_secondary95</color>
 
-    <!-- Chipbar -->
-    <color name="chipbar_text_and_icon_color">@android:color/system_accent2_900</color>
-
     <!-- Internet Dialog -->
     <!-- Material next state on color-->
     <color name="settingslib_state_on_color">@color/settingslib_state_on</color>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 4db42aa..9cb8aa0 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1110,6 +1110,7 @@
     <!-- Chipbar -->
     <!-- (Used for media tap-to-transfer chip for sender device and active unlock) -->
     <dimen name="chipbar_outer_padding">16dp</dimen>
+    <dimen name="chipbar_outer_padding_half">8dp</dimen>
     <dimen name="chipbar_text_size">16sp</dimen>
     <dimen name="chipbar_start_icon_size">24dp</dimen>
     <dimen name="chipbar_end_icon_size">20dp</dimen>
@@ -1198,19 +1199,17 @@
     <dimen name="controls_top_margin">48dp</dimen>
     <dimen name="controls_content_margin_horizontal">0dp</dimen>
     <dimen name="control_header_text_size">24sp</dimen>
-    <dimen name="control_item_text_size">16sp</dimen>
+    <dimen name="control_item_text_size">14sp</dimen>
     <dimen name="control_menu_item_text_size">16sp</dimen>
-    <dimen name="control_menu_item_min_height">56dp</dimen>
+    <dimen name="control_menu_item_height">54dp</dimen>
     <dimen name="control_menu_vertical_padding">12dp</dimen>
-    <dimen name="control_menu_horizontal_padding">16dp</dimen>
-    <dimen name="control_popup_item_corner_radius">4dp</dimen>
-    <dimen name="control_popup_item_height">56dp</dimen>
-    <dimen name="control_popup_item_padding">16dp</dimen>
-    <dimen name="control_popup_items_divider_height">1dp</dimen>
+    <dimen name="control_menu_horizontal_padding">@dimen/notification_side_paddings</dimen>
+    <dimen name="control_apps_popup_item_height">56dp</dimen>
+    <dimen name="control_popup_item_corner_radius">@dimen/notification_corner_radius_small</dimen>
+    <dimen name="control_popup_items_divider_height">@dimen/controls_app_divider_height</dimen>
     <dimen name="control_popup_max_width">380dp</dimen>
-    <dimen name="control_popup_corner_radius">28dp</dimen>
+    <dimen name="control_popup_corner_radius">@dimen/notification_corner_radius</dimen>
     <dimen name="control_popup_horizontal_margin">16dp</dimen>
-    <dimen name="control_spinner_padding_vertical">24dp</dimen>
     <dimen name="control_spinner_padding_horizontal">20dp</dimen>
     <dimen name="control_text_size">14sp</dimen>
     <dimen name="control_icon_size">24dp</dimen>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 74ae954..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 &amp; 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>
 
@@ -3086,4 +3116,7 @@
 
     <!-- Content description for when assistant attention is active [CHAR LIMIT=NONE] -->
     <string name="assistant_attention_content_description">Assistant attention on</string>
+
+    <!--- Content of toast triggered when the notes app entry point is triggered without setting a default notes app. [CHAR LIMIT=NONE] -->
+    <string name="set_default_notes_app_toast_content">Set default notes app in Settings</string>
 </resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 2098aea..9d0cc11 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -70,6 +70,15 @@
         <item name="android:fontWeight">700</item>
     </style>
 
+    <style name="Chipbar" />
+
+    <style name="Chipbar.Text" parent="@*android:style/TextAppearance.DeviceDefault.Notification.Title">
+        <!-- Text size should be kept in sync with the notification conversation header size. (The
+             conversation header doesn't have a defined style, so the size must be copied here.)
+             See notification_template_conversation_header.xml. -->
+        <item name="android:textSize">16sp</item>
+    </style>
+
     <style name="TextAppearance" />
 
     <style name="TextAppearance.QS">
@@ -886,7 +895,7 @@
         <item name="android:textColor">@color/control_primary_text</item>
         <item name="android:singleLine">true</item>
         <item name="android:gravity">center_vertical</item>
-        <item name="android:minHeight">@dimen/control_menu_item_min_height</item>
+        <item name="android:minHeight">@dimen/control_menu_item_height</item>
     </style>
 
     <style name="Control.Spinner">
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 0779653..8b87e2a 100644
--- a/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt
+++ b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt
@@ -25,6 +25,7 @@
 import android.text.format.DateFormat
 import android.util.TypedValue
 import android.view.View
+import android.view.View.OnAttachStateChangeListener
 import android.view.ViewTreeObserver
 import android.widget.FrameLayout
 import androidx.annotation.VisibleForTesting
@@ -98,13 +99,33 @@
                 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()
                 }
                 updateFontSizes()
                 updateTimeListeners()
+                value.smallClock.view.addOnAttachStateChangeListener(
+                    object : OnAttachStateChangeListener {
+                        override fun onViewAttachedToWindow(p0: View?) {
+                            value.events.onTimeFormatChanged(DateFormat.is24HourFormat(context))
+                        }
+
+                        override fun onViewDetachedFromWindow(p0: View?) {
+                        }
+                })
+                value.largeClock.view.addOnAttachStateChangeListener(
+                    object : OnAttachStateChangeListener {
+                        override fun onViewAttachedToWindow(p0: View?) {
+                            value.events.onTimeFormatChanged(DateFormat.is24HourFormat(context))
+                        }
+
+                        override fun onViewDetachedFromWindow(p0: View?) {
+                        }
+                })
             }
         }
 
@@ -156,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
+                    }
                 }
             }
         }
@@ -174,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) {
@@ -221,7 +246,7 @@
     private val configListener =
         object : ConfigurationController.ConfigurationListener {
             override fun onThemeChanged() {
-                clock?.events?.onColorPaletteChanged(resources)
+                clock?.run { events.onColorPaletteChanged(resources) }
                 updateColors()
             }
 
@@ -234,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
             }
@@ -243,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()) }
             }
         }
 
@@ -253,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)
+                        }
                     }
                 }
 
@@ -262,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) }
             }
         }
 
@@ -330,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 0326b6d..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() {
@@ -294,11 +295,11 @@
 
     public void dump(PrintWriter pw, String[] args) {
         pw.println("KeyguardClockSwitch:");
-        pw.println("  mSmallClockFrame: " + mSmallClockFrame);
-        pw.println("  mSmallClockFrame.alpha: " + mSmallClockFrame.getAlpha());
-        pw.println("  mLargeClockFrame: " + mLargeClockFrame);
-        pw.println("  mLargeClockFrame.alpha: " + mLargeClockFrame.getAlpha());
-        pw.println("  mStatusArea: " + mStatusArea);
-        pw.println("  mDisplayedClockSize: " + mDisplayedClockSize);
+        pw.println("  mSmallClockFrame = " + mSmallClockFrame);
+        pw.println("  mSmallClockFrame.alpha = " + mSmallClockFrame.getAlpha());
+        pw.println("  mLargeClockFrame = " + mLargeClockFrame);
+        pw.println("  mLargeClockFrame.alpha = " + mLargeClockFrame.getAlpha());
+        pw.println("  mStatusArea = " + mStatusArea);
+        pw.println("  mDisplayedClockSize = " + mDisplayedClockSize);
     }
 }
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
index 25d1792..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);
         }
     }
 
@@ -493,7 +495,7 @@
         if (mDateWeatherView != null) {
             mUiExecutor.execute(() -> {
                 mDateWeatherView.setVisibility(
-                        clockHasCustomWeatherDataDisplay() ? View.GONE : View.VISIBLE);
+                        clockHasCustomWeatherDataDisplay() ? View.INVISIBLE : View.VISIBLE);
             });
         }
     }
@@ -519,9 +521,10 @@
 
     @Override
     public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
-        pw.println("currentClockSizeLarge=" + (mCurrentClockSize == LARGE));
-        pw.println("mCanShowDoubleLineClock=" + mCanShowDoubleLineClock);
+        pw.println("currentClockSizeLarge: " + (mCurrentClockSize == LARGE));
+        pw.println("mCanShowDoubleLineClock: " + mCanShowDoubleLineClock);
         mView.dump(pw, args);
+        mClockRegistry.dump(pw, args);
         ClockController clock = getClock();
         if (clock != null) {
             clock.dump(pw);
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 87a7758..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;
@@ -75,6 +74,7 @@
 import com.android.systemui.classifier.FalsingCollector;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.flags.Flags;
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
 import com.android.systemui.log.SessionTracker;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.FalsingManager;
@@ -115,6 +115,7 @@
     private final SessionTracker mSessionTracker;
     private final Optional<SideFpsController> mSideFpsController;
     private final FalsingA11yDelegate mFalsingA11yDelegate;
+    private final KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor;
     private int mTranslationY;
     // Whether the volume keys should be handled by keyguard. If true, then
     // they will be handled here for specific media types such as music, otherwise
@@ -177,6 +178,7 @@
 
         @Override
         public void onUserInput() {
+            mKeyguardFaceAuthInteractor.onPrimaryBouncerUserInput();
             mUpdateMonitor.cancelFaceAuth();
         }
 
@@ -300,11 +302,12 @@
         @Override
         public void onSwipeUp() {
             if (!mUpdateMonitor.isFaceDetectionRunning()) {
+                mKeyguardFaceAuthInteractor.onSwipeUpOnBouncer();
                 boolean didFaceAuthRun = mUpdateMonitor.requestFaceAuth(
                         FaceAuthApiRequestReason.SWIPE_UP_ON_BOUNCER);
                 mKeyguardSecurityCallback.userActivity();
                 if (didFaceAuthRun) {
-                    showMessage(null, null);
+                    showMessage(/* message= */ null, /* colorState= */ null, /* animated= */ true);
                 }
             }
             if (mUpdateMonitor.isFaceEnrolled()) {
@@ -389,7 +392,8 @@
             FalsingA11yDelegate falsingA11yDelegate,
             TelephonyManager telephonyManager,
             ViewMediatorCallback viewMediatorCallback,
-            AudioManager audioManager
+            AudioManager audioManager,
+            KeyguardFaceAuthInteractor keyguardFaceAuthInteractor
     ) {
         super(view);
         mLockPatternUtils = lockPatternUtils;
@@ -414,6 +418,7 @@
         mTelephonyManager = telephonyManager;
         mViewMediatorCallback = viewMediatorCallback;
         mAudioManager = audioManager;
+        mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor;
     }
 
     @Override
@@ -454,7 +459,7 @@
         showPrimarySecurityScreen(true);
         mAdminSecondaryLockScreenController.hide();
         if (mCurrentSecurityMode != SecurityMode.None) {
-            getCurrentSecurityController().onPause();
+            getCurrentSecurityController(controller -> controller.onPause());
         }
         mView.onPause();
         mView.clearFocus();
@@ -508,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));
         }
     }
 
@@ -629,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()),
@@ -640,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());
@@ -669,7 +677,7 @@
         if (mCurrentSecurityMode != SecurityMode.None) {
             setAlpha(1f);
             mView.startAppearAnimation(mCurrentSecurityMode);
-            getCurrentSecurityController().startAppearAnimation();
+            getCurrentSecurityController(controller -> controller.startAppearAnimation());
         }
     }
 
@@ -679,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());
         }
     }
 
@@ -804,8 +811,9 @@
         return finish;
     }
 
+    @Override
     public boolean needsInput() {
-        return getCurrentSecurityController().needsInput();
+        return false;
     }
 
     /**
@@ -933,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());
+                });
     }
 
     /**
@@ -981,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) {
@@ -1028,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);
     }
 
     /**
@@ -1086,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/KeyguardStatusView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
index b8e196f..d8e1eb0f 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
@@ -19,10 +19,12 @@
 import static java.util.Collections.emptySet;
 
 import android.content.Context;
+import android.os.Build;
 import android.os.Trace;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewPropertyAnimator;
 import android.widget.GridLayout;
 
 import com.android.systemui.R;
@@ -118,6 +120,16 @@
     }
 
     @Override
+    public ViewPropertyAnimator animate() {
+        if (Build.IS_DEBUGGABLE) {
+            throw new IllegalArgumentException(
+                    "KeyguardStatusView does not support ViewPropertyAnimator. "
+                            + "Use PropertyAnimator instead.");
+        }
+        return super.animate();
+    }
+
+    @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         Trace.beginSection("KeyguardStatusView#onMeasure");
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
index 6f54988..edfcb8d 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
@@ -73,7 +73,7 @@
      */
     private static final int KEYGUARD_STATUS_VIEW_CUSTOM_CLOCK_MOVE_DURATION = 1000;
 
-    private static final AnimationProperties CLOCK_ANIMATION_PROPERTIES =
+    public static final AnimationProperties CLOCK_ANIMATION_PROPERTIES =
             new AnimationProperties().setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
 
     private final KeyguardSliceViewController mKeyguardSliceViewController;
@@ -221,16 +221,32 @@
         mView.setImportantForAccessibility(mode);
     }
 
+    @VisibleForTesting
+    void setProperty(AnimatableProperty property, float value, boolean animate) {
+        PropertyAnimator.setProperty(mView, property, value, CLOCK_ANIMATION_PROPERTIES, animate);
+    }
+
     /**
      * Update position of the view with an optional animation
      */
     public void updatePosition(int x, int y, float scale, boolean animate) {
         float oldY = mView.getY();
-        PropertyAnimator.setProperty(mView, AnimatableProperty.Y, y, CLOCK_ANIMATION_PROPERTIES,
-                animate);
+        setProperty(AnimatableProperty.Y, y, animate);
 
-        mKeyguardClockSwitchController.updatePosition(x, scale, CLOCK_ANIMATION_PROPERTIES,
-                animate);
+        ClockController clock = mKeyguardClockSwitchController.getClock();
+        if (clock != null && clock.getConfig().getUseAlternateSmartspaceAODTransition()) {
+            // If requested, scale the entire view instead of just the clock view
+            mKeyguardClockSwitchController.updatePosition(x, 1f /* scale */,
+                    CLOCK_ANIMATION_PROPERTIES, animate);
+            setProperty(AnimatableProperty.SCALE_X, scale, animate);
+            setProperty(AnimatableProperty.SCALE_Y, scale, animate);
+        } else {
+            mKeyguardClockSwitchController.updatePosition(x, scale,
+                    CLOCK_ANIMATION_PROPERTIES, animate);
+            setProperty(AnimatableProperty.SCALE_X, 1f, animate);
+            setProperty(AnimatableProperty.SCALE_Y, 1f, animate);
+        }
+
         if (oldY != y) {
             mKeyguardClockSwitchController.updateKeyguardStatusViewOffset();
         }
@@ -333,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.
@@ -420,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 350c4ed..9573913 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -154,6 +154,16 @@
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.dump.DumpsysTableLogger;
+import com.android.systemui.keyguard.domain.interactor.FaceAuthenticationListener;
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
+import com.android.systemui.keyguard.shared.constants.TrustAgentUiEvent;
+import com.android.systemui.keyguard.shared.model.AcquiredAuthenticationStatus;
+import com.android.systemui.keyguard.shared.model.AuthenticationStatus;
+import com.android.systemui.keyguard.shared.model.DetectionStatus;
+import com.android.systemui.keyguard.shared.model.ErrorAuthenticationStatus;
+import com.android.systemui.keyguard.shared.model.FailedAuthenticationStatus;
+import com.android.systemui.keyguard.shared.model.HelpAuthenticationStatus;
+import com.android.systemui.keyguard.shared.model.SuccessAuthenticationStatus;
 import com.android.systemui.keyguard.shared.model.SysUiFaceAuthenticateOptions;
 import com.android.systemui.log.SessionTracker;
 import com.android.systemui.plugins.WeatherData;
@@ -287,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;
@@ -372,6 +382,8 @@
     private final FingerprintManager mFpm;
     @Nullable
     private final FaceManager mFaceManager;
+    @Nullable
+    private KeyguardFaceAuthInteractor mFaceAuthInteractor;
     private final LockPatternUtils mLockPatternUtils;
     @VisibleForTesting
     @DevicePostureInt
@@ -526,6 +538,14 @@
 
             mLogger.logTrustGrantedWithFlags(flags, newlyUnlocked, userId, message);
             if (userId == getCurrentUser()) {
+                if (newlyUnlocked) {
+                    // if this callback is ever removed, this should then be logged in
+                    // TrustRepository
+                    mUiEventLogger.log(
+                            TrustAgentUiEvent.TRUST_AGENT_NEWLY_UNLOCKED,
+                            getKeyguardSessionId()
+                    );
+                }
                 final TrustGrantFlags trustGrantFlags = new TrustGrantFlags(flags);
                 for (int i = 0; i < mCallbacks.size(); i++) {
                     KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -1165,8 +1185,21 @@
         Trace.endSection();
     }
 
+    /**
+     * @deprecated This is being migrated to use modern architecture, this method is visible purely
+     * for bridging the gap while the migration is active.
+     */
     private void handleFaceAuthFailed() {
         Assert.isMainThread();
+        String reason =
+                mKeyguardBypassController.canBypass() ? "bypass"
+                        : mAlternateBouncerShowing ? "alternateBouncer"
+                                : mPrimaryBouncerFullyShown ? "bouncer"
+                                        : "udfpsFpDown";
+        requestActiveUnlock(
+                ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL,
+                "faceFailure-" + reason);
+
         mLogger.d("onFaceAuthFailed");
         mFaceCancelSignal = null;
         setFaceRunningState(BIOMETRIC_STATE_STOPPED);
@@ -1180,6 +1213,10 @@
                 mContext.getString(R.string.kg_face_not_recognized));
     }
 
+    /**
+     * @deprecated This is being migrated to use modern architecture, this method is visible purely
+     * for bridging the gap while the migration is active.
+     */
     private void handleFaceAcquired(int acquireInfo) {
         Assert.isMainThread();
         mLogger.logFaceAcquired(acquireInfo);
@@ -1189,8 +1226,19 @@
                 cb.onBiometricAcquired(FACE, acquireInfo);
             }
         }
+
+        if (mActiveUnlockConfig.shouldRequestActiveUnlockOnFaceAcquireInfo(
+                acquireInfo)) {
+            requestActiveUnlock(
+                    ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL,
+                    "faceAcquireInfo-" + acquireInfo);
+        }
     }
 
+    /**
+     * @deprecated This is being migrated to use modern architecture, this method is visible purely
+     * for bridging the gap while the migration is active.
+     */
     private void handleFaceAuthenticated(int authUserId, boolean isStrongBiometric) {
         Trace.beginSection("KeyGuardUpdateMonitor#handlerFaceAuthenticated");
         try {
@@ -1203,7 +1251,7 @@
                 mLogger.logFaceAuthForWrongUser(authUserId);
                 return;
             }
-            if (isFaceDisabled(userId)) {
+            if (!isFaceAuthInteractorEnabled() && isFaceDisabled(userId)) {
                 mLogger.logFaceAuthDisabledForUser(userId);
                 return;
             }
@@ -1215,7 +1263,14 @@
         Trace.endSection();
     }
 
+    /**
+     * @deprecated This is being migrated to use modern architecture, this method is visible purely
+     * for bridging the gap while the migration is active.
+     */
     private void handleFaceHelp(int msgId, String helpString) {
+        if (mFaceAcquiredInfoIgnoreList.contains(msgId)) {
+            return;
+        }
         Assert.isMainThread();
         mLogger.logFaceAuthHelpMsg(msgId, helpString);
         for (int i = 0; i < mCallbacks.size(); i++) {
@@ -1226,22 +1281,10 @@
         }
     }
 
-    private final Runnable mRetryFaceAuthentication = new Runnable() {
-        @Override
-        public void run() {
-            mLogger.logRetryingAfterFaceHwUnavailable(mHardwareFaceUnavailableRetryCount);
-            updateFaceListeningState(BIOMETRIC_ACTION_UPDATE,
-                    FACE_AUTH_TRIGGERED_RETRY_AFTER_HW_UNAVAILABLE);
-        }
-    };
-
-    private void onFaceCancelNotReceived() {
-        mLogger.e("Face cancellation not received, transitioning to STOPPED");
-        mFaceRunningState = BIOMETRIC_STATE_STOPPED;
-        KeyguardUpdateMonitor.this.updateFaceListeningState(BIOMETRIC_ACTION_STOP,
-                FACE_AUTH_STOPPED_FACE_CANCEL_NOT_RECEIVED);
-    }
-
+    /**
+     * @deprecated This is being migrated to use modern architecture, this method is visible purely
+     * for bridging the gap while the migration is active.
+     */
     private void handleFaceError(int msgId, final String originalErrMsg) {
         Assert.isMainThread();
         String errString = originalErrMsg;
@@ -1299,6 +1342,28 @@
         if (lockedOutStateChanged) {
             notifyLockedOutStateChanged(FACE);
         }
+
+        if (mActiveUnlockConfig.shouldRequestActiveUnlockOnFaceError(msgId)) {
+            requestActiveUnlock(
+                    ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL,
+                    "faceError-" + msgId);
+        }
+    }
+
+    private final Runnable mRetryFaceAuthentication = new Runnable() {
+        @Override
+        public void run() {
+            mLogger.logRetryingAfterFaceHwUnavailable(mHardwareFaceUnavailableRetryCount);
+            updateFaceListeningState(BIOMETRIC_ACTION_UPDATE,
+                    FACE_AUTH_TRIGGERED_RETRY_AFTER_HW_UNAVAILABLE);
+        }
+    };
+
+    private void onFaceCancelNotReceived() {
+        mLogger.e("Face cancellation not received, transitioning to STOPPED");
+        mFaceRunningState = BIOMETRIC_STATE_STOPPED;
+        KeyguardUpdateMonitor.this.updateFaceListeningState(BIOMETRIC_ACTION_STOP,
+                FACE_AUTH_STOPPED_FACE_CANCEL_NOT_RECEIVED);
     }
 
     private void handleFaceLockoutReset(@LockoutMode int mode) {
@@ -1343,10 +1408,61 @@
         return mFingerprintRunningState == BIOMETRIC_STATE_RUNNING;
     }
 
+    /**
+     * @deprecated This is being migrated to use modern architecture.
+     */
+    @Deprecated
     public boolean isFaceDetectionRunning() {
+        if (isFaceAuthInteractorEnabled()) {
+            return getFaceAuthInteractor().isRunning();
+        }
         return mFaceRunningState == BIOMETRIC_STATE_RUNNING;
     }
 
+    private boolean isFaceAuthInteractorEnabled() {
+        return mFaceAuthInteractor != null && mFaceAuthInteractor.isEnabled();
+    }
+
+    private @Nullable KeyguardFaceAuthInteractor getFaceAuthInteractor() {
+        return mFaceAuthInteractor;
+    }
+
+    /**
+     * Set the face auth interactor that should be used for initiating face authentication.
+     */
+    public void setFaceAuthInteractor(@Nullable KeyguardFaceAuthInteractor faceAuthInteractor) {
+        mFaceAuthInteractor = faceAuthInteractor;
+        mFaceAuthInteractor.registerListener(mFaceAuthenticationListener);
+    }
+
+    private FaceAuthenticationListener mFaceAuthenticationListener =
+            new FaceAuthenticationListener() {
+                @Override
+                public void onAuthenticationStatusChanged(@NonNull AuthenticationStatus status) {
+                    if (status instanceof AcquiredAuthenticationStatus) {
+                        handleFaceAcquired(
+                                ((AcquiredAuthenticationStatus) status).getAcquiredInfo());
+                    } else if (status instanceof ErrorAuthenticationStatus) {
+                        ErrorAuthenticationStatus error = (ErrorAuthenticationStatus) status;
+                        handleFaceError(error.getMsgId(), error.getMsg());
+                    } else if (status instanceof FailedAuthenticationStatus) {
+                        handleFaceAuthFailed();
+                    } else if (status instanceof HelpAuthenticationStatus) {
+                        HelpAuthenticationStatus helpMsg = (HelpAuthenticationStatus) status;
+                        handleFaceHelp(helpMsg.getMsgId(), helpMsg.getMsg());
+                    } else if (status instanceof SuccessAuthenticationStatus) {
+                        FaceManager.AuthenticationResult result =
+                                ((SuccessAuthenticationStatus) status).getSuccessResult();
+                        handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric());
+                    }
+                }
+
+                @Override
+                public void onDetectionStatusChanged(@NonNull DetectionStatus status) {
+                    handleFaceAuthenticated(status.getUserId(), status.isStrongBiometric());
+                }
+            };
+
     private boolean isTrustDisabled() {
         // Don't allow trust agent if device is secured with a SIM PIN. This is here
         // mainly because there's no other way to prompt the user to enter their SIM PIN
@@ -1360,6 +1476,10 @@
                 || isSimPinSecure();
     }
 
+    /**
+     * @deprecated This method is not needed anymore with the new face auth system.
+     */
+    @Deprecated
     private boolean isFaceDisabled(int userId) {
         // TODO(b/140035044)
         return whitelistIpcs(() ->
@@ -1371,7 +1491,10 @@
     /**
      * @return whether the current user has been authenticated with face. This may be true
      * on the lockscreen if the user doesn't have bypass enabled.
+     *
+     * @deprecated This is being migrated to use modern architecture.
      */
+    @Deprecated
     public boolean getIsFaceAuthenticated() {
         boolean faceAuthenticated = false;
         BiometricAuthenticated bioFaceAuthenticated = mUserFaceAuthenticated.get(getCurrentUser());
@@ -1619,6 +1742,9 @@
     void setAssistantVisible(boolean assistantVisible) {
         mAssistantVisible = assistantVisible;
         mLogger.logAssistantVisible(mAssistantVisible);
+        if (isFaceAuthInteractorEnabled()) {
+            mFaceAuthInteractor.onAssistantTriggeredOnLockScreen();
+        }
         updateBiometricListeningState(BIOMETRIC_ACTION_UPDATE,
                 FACE_AUTH_UPDATED_ASSISTANT_VISIBILITY_CHANGED);
         if (mAssistantVisible) {
@@ -1645,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);
@@ -1710,7 +1832,7 @@
             } else if (DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED
                     .equals(action)) {
                 mHandler.sendMessage(mHandler.obtainMessage(MSG_DPM_STATE_CHANGED,
-                        getSendingUserId()));
+                        getSendingUserId(), 0));
             } else if (ACTION_USER_UNLOCKED.equals(action)) {
                 mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_UNLOCKED,
                         getSendingUserId(), 0));
@@ -1832,54 +1954,27 @@
 
                 @Override
                 public void onAuthenticationFailed() {
-                        String reason =
-                                mKeyguardBypassController.canBypass() ? "bypass"
-                                        : mAlternateBouncerShowing ? "alternateBouncer"
-                                                : mPrimaryBouncerFullyShown ? "bouncer"
-                                                        : "udfpsFpDown";
-                        requestActiveUnlock(
-                                ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL,
-                                "faceFailure-" + reason);
-
                     handleFaceAuthFailed();
                 }
 
                 @Override
                 public void onAuthenticationSucceeded(FaceManager.AuthenticationResult result) {
-                    Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded");
                     handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric());
-                    Trace.endSection();
                 }
 
                 @Override
                 public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
-                    if (mFaceAcquiredInfoIgnoreList.contains(helpMsgId)) {
-                        return;
-                    }
                     handleFaceHelp(helpMsgId, helpString.toString());
                 }
 
                 @Override
                 public void onAuthenticationError(int errMsgId, CharSequence errString) {
                     handleFaceError(errMsgId, errString.toString());
-
-                    if (mActiveUnlockConfig.shouldRequestActiveUnlockOnFaceError(errMsgId)) {
-                        requestActiveUnlock(
-                                ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL,
-                                "faceError-" + errMsgId);
-                    }
                 }
 
                 @Override
                 public void onAuthenticationAcquired(int acquireInfo) {
                     handleFaceAcquired(acquireInfo);
-
-                    if (mActiveUnlockConfig.shouldRequestActiveUnlockOnFaceAcquireInfo(
-                            acquireInfo)) {
-                        requestActiveUnlock(
-                                ActiveUnlockConfig.ActiveUnlockRequestOrigin.BIOMETRIC_FAIL,
-                                "faceAcquireInfo-" + acquireInfo);
-                    }
                 }
     };
 
@@ -2427,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();
@@ -2628,7 +2723,9 @@
      * @param reason One of the reasons {@link FaceAuthApiRequestReason} on why this API is being
      * invoked.
      * @return current face auth detection state, true if it is running.
+     * @deprecated This is being migrated to use modern architecture.
      */
+    @Deprecated
     public boolean requestFaceAuth(@FaceAuthApiRequestReason String reason) {
         mLogger.logFaceAuthRequested(reason);
         updateFaceListeningState(BIOMETRIC_ACTION_START, apiRequestReasonToUiEvent(reason));
@@ -2643,6 +2740,7 @@
     }
 
     private void updateFaceListeningState(int action, @NonNull FaceAuthUiEvent faceAuthUiEvent) {
+        if (isFaceAuthInteractorEnabled()) return;
         // If this message exists, we should not authenticate again until this message is
         // consumed by the handler
         if (mHandler.hasMessages(MSG_BIOMETRIC_AUTHENTICATION_CONTINUE)) {
@@ -2870,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);
@@ -2879,7 +2977,7 @@
                 !mSwitchingUser
                         && !fingerprintDisabledForUser
                         && (!mKeyguardGoingAway || !mDeviceInteractive)
-                        && mIsPrimaryUser
+                        && mIsSystemUser
                         && biometricEnabledForUser
                         && !isUserInLockdown(user);
         final boolean strongerAuthRequired = !isUnlockingWithFingerprintAllowed();
@@ -2923,11 +3021,11 @@
                     isKeyguardVisible(),
                     mKeyguardOccluded,
                     mOccludingAppRequestingFp,
-                    mIsPrimaryUser,
                     shouldListenSideFpsState,
                     shouldListenForFingerprintAssistant,
                     strongerAuthRequired,
                     mSwitchingUser,
+                    mIsSystemUser,
                     isUdfps,
                     userDoesNotHaveTrust));
 
@@ -2972,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
@@ -2984,7 +3082,7 @@
                         || mAlternateBouncerShowing)
                 && !mSwitchingUser && !faceDisabledForUser && userNotTrustedOrDetectionIsNeeded
                 && !mKeyguardGoingAway && biometricEnabledForUser
-                && faceAuthAllowedOrDetectionIsNeeded && mIsPrimaryUser
+                && faceAuthAllowedOrDetectionIsNeeded && mIsSystemUser
                 && (!mSecureCameraLaunched || mAlternateBouncerShowing)
                 && faceAndFpNotAuthenticated
                 && !mGoingToSleep
@@ -3010,10 +3108,10 @@
                     shouldListenForFaceAssistant,
                     mOccludingAppRequestingFace,
                     isPostureAllowedForFaceAuth,
-                    mIsPrimaryUser,
                     mSecureCameraLaunched,
                     supportsDetect,
                     mSwitchingUser,
+                    mIsSystemUser,
                     isUdfpsFingerDown,
                     userNotTrustedOrDetectionIsNeeded));
 
@@ -3154,6 +3252,9 @@
     }
 
     public boolean isFaceLockedOut() {
+        if (isFaceAuthInteractorEnabled()) {
+            return getFaceAuthInteractor().isLockedOut();
+        }
         return mFaceLockedOutPermanent;
     }
 
@@ -3202,13 +3303,23 @@
         return mIsUnlockWithFingerprintPossible.getOrDefault(userId, false);
     }
 
+    /**
+     * @deprecated This is being migrated to use modern architecture.
+     */
+    @Deprecated
     private boolean isUnlockWithFacePossible(int userId) {
+        if (isFaceAuthInteractorEnabled()) {
+            return getFaceAuthInteractor().canFaceAuthRun();
+        }
         return isFaceAuthEnabledForUser(userId) && !isFaceDisabled(userId);
     }
 
     /**
      * If face hardware is available, user has enrolled and enabled auth via setting.
+     *
+     * @deprecated This is being migrated to use modern architecture.
      */
+    @Deprecated
     public boolean isFaceAuthEnabledForUser(int userId) {
         // TODO (b/242022358), make this rely on onEnrollmentChanged event and update it only once.
         updateFaceEnrolled(userId);
@@ -3232,6 +3343,7 @@
     }
 
     private void stopListeningForFace(@NonNull FaceAuthUiEvent faceAuthUiEvent) {
+        if (isFaceAuthInteractorEnabled()) return;
         mLogger.v("stopListeningForFace()");
         mLogger.logStoppedListeningForFace(mFaceRunningState, faceAuthUiEvent.getReason());
         mUiEventLogger.log(faceAuthUiEvent, getKeyguardSessionId());
@@ -4098,6 +4210,9 @@
         mStatusBarStateController.removeCallback(mStatusBarStateControllerListener);
         mTelephonyListenerManager.removeActiveDataSubscriptionIdListener(mPhoneStateListener);
         mSubscriptionManager.removeOnSubscriptionsChangedListener(mSubscriptionListener);
+        if (isFaceAuthInteractorEnabled()) {
+            mFaceAuthInteractor.unregisterListener(mFaceAuthenticationListener);
+        }
 
         if (mDeviceProvisionedObserver != null) {
             mContext.getContentResolver().unregisterContentObserver(mDeviceProvisionedObserver);
@@ -4127,6 +4242,7 @@
         pw.println("  getUserHasTrust()=" + getUserHasTrust(getCurrentUser()));
         pw.println("  getUserUnlockedWithBiometric()="
                 + getUserUnlockedWithBiometric(getCurrentUser()));
+        pw.println("  isFaceAuthInteractorEnabled: " + isFaceAuthInteractorEnabled());
         pw.println("  SIM States:");
         for (SimData data : mSimDatas.values()) {
             pw.println("    " + data.toString());
@@ -4262,7 +4378,7 @@
      * Cancels all operations in the scheduler if it is hung for 10 seconds.
      */
     public void startBiometricWatchdog() {
-        if (mFaceManager != null) {
+        if (mFaceManager != null && !isFaceAuthInteractorEnabled()) {
             mFaceManager.scheduleWatchdog();
         }
         if (mFpm != null) {
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/KeyguardVisibilityHelper.java b/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java
index a678edc..651c979 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java
@@ -18,8 +18,8 @@
 
 import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
 
+import android.util.Property;
 import android.view.View;
-import android.view.ViewPropertyAnimator;
 
 import com.android.systemui.animation.Interpolators;
 import com.android.systemui.plugins.log.LogBuffer;
@@ -34,6 +34,8 @@
 
 import com.google.errorprone.annotations.CompileTimeConstant;
 
+import java.util.function.Consumer;
+
 /**
  * Helper class for updating visibility of keyguard views based on keyguard and status bar state.
  * This logic is shared by both the keyguard status view and the keyguard user switcher.
@@ -83,47 +85,49 @@
             boolean keyguardFadingAway,
             boolean goingToFullShade,
             int oldStatusBarState) {
-        mView.animate().cancel();
+        PropertyAnimator.cancelAnimation(mView, AnimatableProperty.ALPHA);
         boolean isOccluded = mKeyguardStateController.isOccluded();
         mKeyguardViewVisibilityAnimating = false;
 
         if ((!keyguardFadingAway && oldStatusBarState == KEYGUARD
                 && statusBarState != KEYGUARD) || goingToFullShade) {
             mKeyguardViewVisibilityAnimating = true;
-            mView.animate()
-                    .alpha(0f)
-                    .setStartDelay(0)
-                    .setDuration(160)
-                    .setInterpolator(Interpolators.ALPHA_OUT)
-                    .withEndAction(
-                            mAnimateKeyguardStatusViewGoneEndRunnable);
+
+            AnimationProperties animProps = new AnimationProperties()
+                    .setCustomInterpolator(View.ALPHA, Interpolators.ALPHA_OUT)
+                    .setAnimationEndAction(mSetGoneEndAction);
             if (keyguardFadingAway) {
-                mView.animate()
-                        .setStartDelay(mKeyguardStateController.getKeyguardFadingAwayDelay())
-                        .setDuration(mKeyguardStateController.getShortenedFadingAwayDuration())
-                        .start();
+                animProps
+                        .setDelay(mKeyguardStateController.getKeyguardFadingAwayDelay())
+                        .setDuration(mKeyguardStateController.getShortenedFadingAwayDuration());
                 log("goingToFullShade && keyguardFadingAway");
             } else {
+                animProps.setDelay(0).setDuration(160);
                 log("goingToFullShade && !keyguardFadingAway");
             }
+            PropertyAnimator.setProperty(
+                    mView, AnimatableProperty.ALPHA, 0f, animProps, true /* animate */);
         } else if (oldStatusBarState == StatusBarState.SHADE_LOCKED && statusBarState == KEYGUARD) {
             mView.setVisibility(View.VISIBLE);
             mKeyguardViewVisibilityAnimating = true;
             mView.setAlpha(0f);
-            mView.animate()
-                    .alpha(1f)
-                    .setStartDelay(0)
-                    .setDuration(320)
-                    .setInterpolator(Interpolators.ALPHA_IN)
-                    .withEndAction(mAnimateKeyguardStatusViewVisibleEndRunnable);
+            PropertyAnimator.setProperty(
+                    mView, AnimatableProperty.ALPHA, 1f,
+                    new AnimationProperties()
+                            .setDelay(0)
+                            .setDuration(320)
+                            .setCustomInterpolator(View.ALPHA, Interpolators.ALPHA_IN)
+                            .setAnimationEndAction(
+                                    property -> mSetVisibleEndRunnable.run()),
+                    true /* animate */);
             log("keyguardFadingAway transition w/ Y Aniamtion");
         } else if (statusBarState == KEYGUARD) {
             if (keyguardFadingAway) {
                 mKeyguardViewVisibilityAnimating = true;
-                ViewPropertyAnimator animator = mView.animate()
-                        .alpha(0)
-                        .setInterpolator(Interpolators.FAST_OUT_LINEAR_IN)
-                        .withEndAction(mAnimateKeyguardStatusViewInvisibleEndRunnable);
+                AnimationProperties animProps = new AnimationProperties()
+                        .setDelay(0)
+                        .setCustomInterpolator(View.ALPHA, Interpolators.FAST_OUT_LINEAR_IN)
+                        .setAnimationEndAction(mSetInvisibleEndAction);
                 if (mAnimateYPos) {
                     float target = mView.getY() - mView.getHeight() * 0.05f;
                     int delay = 0;
@@ -135,13 +139,16 @@
                     PropertyAnimator.setProperty(mView, AnimatableProperty.Y, target,
                             mAnimationProperties,
                             true /* animate */);
-                    animator.setDuration(duration)
-                            .setStartDelay(delay);
+                    animProps.setDuration(duration)
+                            .setDelay(delay);
                     log("keyguardFadingAway transition w/ Y Aniamtion");
                 } else {
                     log("keyguardFadingAway transition w/o Y Animation");
                 }
-                animator.start();
+                PropertyAnimator.setProperty(
+                        mView, AnimatableProperty.ALPHA, 0f,
+                        animProps,
+                        true /* animate */);
             } else if (mScreenOffAnimationController.shouldAnimateInKeyguard()) {
                 log("ScreenOff transition");
                 mKeyguardViewVisibilityAnimating = true;
@@ -149,7 +156,7 @@
                 // Ask the screen off animation controller to animate the keyguard visibility for us
                 // since it may need to be cancelled due to keyguard lifecycle events.
                 mScreenOffAnimationController.animateInKeyguard(
-                        mView, mAnimateKeyguardStatusViewVisibleEndRunnable);
+                        mView, mSetVisibleEndRunnable);
             } else {
                 log("Direct set Visibility to VISIBLE");
                 mView.setVisibility(View.VISIBLE);
@@ -163,19 +170,25 @@
         mLastOccludedState = isOccluded;
     }
 
-    private final Runnable mAnimateKeyguardStatusViewInvisibleEndRunnable = () -> {
-        mKeyguardViewVisibilityAnimating = false;
-        mView.setVisibility(View.INVISIBLE);
-        log("Callback Set Visibility to INVISIBLE");
+    private final Consumer<Property> mSetInvisibleEndAction = new Consumer<>() {
+        @Override
+        public void accept(Property property) {
+            mKeyguardViewVisibilityAnimating = false;
+            mView.setVisibility(View.INVISIBLE);
+            log("Callback Set Visibility to INVISIBLE");
+        }
     };
 
-    private final Runnable mAnimateKeyguardStatusViewGoneEndRunnable = () -> {
-        mKeyguardViewVisibilityAnimating = false;
-        mView.setVisibility(View.GONE);
-        log("CallbackSet Visibility to GONE");
+    private final Consumer<Property> mSetGoneEndAction = new Consumer<>() {
+        @Override
+        public void accept(Property property) {
+            mKeyguardViewVisibilityAnimating = false;
+            mView.setVisibility(View.GONE);
+            log("CallbackSet Visibility to GONE");
+        }
     };
 
-    private final Runnable mAnimateKeyguardStatusViewVisibleEndRunnable = () -> {
+    private final Runnable mSetVisibleEndRunnable = () -> {
         mKeyguardViewVisibilityAnimating = false;
         mView.setVisibility(View.VISIBLE);
         log("Callback Set Visibility to VISIBLE");
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 6e98a18..6740375 100644
--- a/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java
+++ b/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java
@@ -27,12 +27,15 @@
 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;
 
 import dagger.Module;
 import dagger.Provides;
+
 import kotlinx.coroutines.CoroutineDispatcher;
 import kotlinx.coroutines.CoroutineScope;
 
@@ -50,7 +53,8 @@
             @Background CoroutineDispatcher bgDispatcher,
             FeatureFlags featureFlags,
             @Main Resources resources,
-            LayoutInflater layoutInflater) {
+            LayoutInflater layoutInflater,
+            @KeyguardClockLog LogBuffer logBuffer) {
         ClockRegistry registry = new ClockRegistry(
                 context,
                 pluginManager,
@@ -61,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/AutoReinflateContainer.java b/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java
index 12dd8f0..4c16d41c 100644
--- a/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java
@@ -16,6 +16,7 @@
 
 import android.annotation.Nullable;
 import android.content.Context;
+import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
@@ -23,21 +24,29 @@
 import android.view.View;
 import android.widget.FrameLayout;
 
-import com.android.systemui.statusbar.policy.ConfigurationController;
-
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Custom {@link FrameLayout} that re-inflates when changes to {@link Configuration} happen.
  * Currently supports changes to density, asset path, and locale.
  */
-public class AutoReinflateContainer extends FrameLayout implements
-        ConfigurationController.ConfigurationListener {
+public class AutoReinflateContainer extends FrameLayout {
+
+    private static final Set<Integer> SUPPORTED_CHANGES = Set.of(
+            ActivityInfo.CONFIG_LOCALE,
+            ActivityInfo.CONFIG_UI_MODE,
+            ActivityInfo.CONFIG_ASSETS_PATHS,
+            ActivityInfo.CONFIG_DENSITY,
+            ActivityInfo.CONFIG_FONT_SCALE
+    );
 
     private final List<InflateListener> mInflateListeners = new ArrayList<>();
     private final int mLayout;
 
+    private final Configuration mLastConfig = new Configuration();
+
     public AutoReinflateContainer(Context context, @Nullable AttributeSet attrs) {
         super(context, attrs);
 
@@ -51,15 +60,14 @@
     }
 
     @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        Dependency.get(ConfigurationController.class).addCallback(this);
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        Dependency.get(ConfigurationController.class).removeCallback(this);
+    protected void onConfigurationChanged(Configuration newConfig) {
+        int diff = mLastConfig.updateFrom(newConfig);
+        for (int change: SUPPORTED_CHANGES) {
+            if ((diff & change) != 0) {
+                inflateLayout();
+                return;
+            }
+        }
     }
 
     protected void inflateLayoutImpl() {
@@ -80,26 +88,6 @@
         listener.onInflated(getChildAt(0));
     }
 
-    @Override
-    public void onDensityOrFontScaleChanged() {
-        inflateLayout();
-    }
-
-    @Override
-    public void onThemeChanged() {
-        inflateLayout();
-    }
-
-    @Override
-    public void onUiModeChanged() {
-        inflateLayout();
-    }
-
-    @Override
-    public void onLocaleListChanged() {
-        inflateLayout();
-    }
-
     public interface InflateListener {
         /**
          * Called whenever a new view is inflated.
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index ef16a3a..aade71a 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -106,7 +106,6 @@
 import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
 import com.android.systemui.statusbar.policy.BluetoothController;
 import com.android.systemui.statusbar.policy.CastController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.DataSaverController;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.statusbar.policy.ExtensionController;
@@ -134,14 +133,14 @@
 import com.android.systemui.util.leak.LeakReporter;
 import com.android.systemui.util.sensors.AsyncSensorManager;
 
+import dagger.Lazy;
+
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import dagger.Lazy;
-
 /**
  * Class to handle ugly dependencies throughout sysui until we determine the
  * long-term dependency injection solution.
@@ -270,7 +269,6 @@
     @Inject Lazy<NotificationShadeWindowController> mNotificationShadeWindowController;
     @Inject Lazy<StatusBarWindowController> mTempStatusBarWindowController;
     @Inject Lazy<DarkIconDispatcher> mDarkIconDispatcher;
-    @Inject Lazy<ConfigurationController> mConfigurationController;
     @Inject Lazy<StatusBarIconController> mStatusBarIconController;
     @Inject Lazy<ScreenLifecycle> mScreenLifecycle;
     @Inject Lazy<WakefulnessLifecycle> mWakefulnessLifecycle;
@@ -441,8 +439,6 @@
 
         mProviders.put(DarkIconDispatcher.class, mDarkIconDispatcher::get);
 
-        mProviders.put(ConfigurationController.class, mConfigurationController::get);
-
         mProviders.put(StatusBarIconController.class, mStatusBarIconController::get);
 
         mProviders.put(ScreenLifecycle.class, mScreenLifecycle::get);
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..7bfd84e 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
@@ -346,6 +346,15 @@
             setSystemGestureExclusion();
             mIsVisible = true;
             mCallback.onSettingsPanelVisibilityChanged(/* shown= */ true);
+
+            if (resetPosition) {
+                // We could not put focus on the settings panel automatically
+                // since it is an inactive window. Therefore, we announce the existence of
+                // magnification settings for accessibility when it is opened.
+                mSettingView.announceForAccessibility(
+                        mContext.getResources().getString(
+                                R.string.accessibility_magnification_settings_panel_description));
+            }
         }
         mContext.registerReceiver(mScreenOffReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));
     }
@@ -559,7 +568,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 e42f051..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 =
@@ -637,6 +640,7 @@
 
     @Override
     public void onDetachedFromWindow() {
+        mPanelInteractionDetector.disable();
         OnBackInvokedDispatcher dispatcher = findOnBackInvokedDispatcher();
         if (dispatcher != null) {
             findOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(mBackCallback);
@@ -674,7 +678,6 @@
 
     @Override
     public void dismissWithoutCallback(boolean animate) {
-        mPanelInteractionDetector.disable();
         if (animate) {
             animateAway(false /* sendReason */, 0 /* reason */);
         } else {
@@ -685,7 +688,6 @@
 
     @Override
     public void dismissFromSystemServer() {
-        mPanelInteractionDetector.disable();
         animateAway(false /* sendReason */, 0 /* reason */);
     }
 
@@ -878,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/AuthDialogPanelInteractionDetector.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt
index d15a2af..b72801d 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetector.kt
@@ -30,6 +30,7 @@
     @MainThread
     fun disable() {
         if (action != null) {
+            Log.i(TAG, "Disable dectector")
             action = null
             shadeExpansionStateManager.removeExpansionListener(this::onPanelExpansionChanged)
         }
@@ -39,8 +40,8 @@
     private fun onPanelExpansionChanged(event: ShadeExpansionChangeEvent) =
         mainExecutor.execute {
             action?.let {
-                if (event.tracking || event.expanded) {
-                    Log.v(TAG, "Detected panel interaction, event: $event")
+                if (event.tracking || (event.expanded && event.fraction > 0)) {
+                    Log.i(TAG, "Detected panel interaction, event: $event")
                     it.onPanelInteraction.run()
                     disable()
                 }
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt
index e0b9f01..d0ac296 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt
@@ -23,14 +23,17 @@
 import android.graphics.Point
 import android.hardware.biometrics.BiometricFingerprintConstants
 import android.hardware.biometrics.BiometricSourceType
+import android.util.DisplayMetrics
 import androidx.annotation.VisibleForTesting
 import com.android.keyguard.KeyguardUpdateMonitor
 import com.android.keyguard.KeyguardUpdateMonitorCallback
 import com.android.keyguard.logging.KeyguardLogger
 import com.android.settingslib.Utils
 import com.android.settingslib.udfps.UdfpsOverlayParams
+import com.android.systemui.CoreStartable
 import com.android.systemui.R
 import com.android.systemui.animation.Interpolators
+import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.flags.FeatureFlags
 import com.android.systemui.flags.Flags
 import com.android.systemui.keyguard.WakefulnessLifecycle
@@ -39,12 +42,11 @@
 import com.android.systemui.statusbar.CircleReveal
 import com.android.systemui.statusbar.LiftReveal
 import com.android.systemui.statusbar.LightRevealEffect
+import com.android.systemui.statusbar.LightRevealScrim
 import com.android.systemui.statusbar.NotificationShadeWindowController
 import com.android.systemui.statusbar.commandline.Command
 import com.android.systemui.statusbar.commandline.CommandRegistry
 import com.android.systemui.statusbar.phone.BiometricUnlockController
-import com.android.systemui.statusbar.phone.CentralSurfaces
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
 import com.android.systemui.statusbar.policy.ConfigurationController
 import com.android.systemui.statusbar.policy.KeyguardStateController
 import com.android.systemui.util.ViewController
@@ -60,9 +62,8 @@
  *
  * The ripple uses the accent color of the current theme.
  */
-@CentralSurfacesScope
+@SysUISingleton
 class AuthRippleController @Inject constructor(
-    private val centralSurfaces: CentralSurfaces,
     private val sysuiContext: Context,
     private val authController: AuthController,
     private val configurationController: ConfigurationController,
@@ -73,12 +74,15 @@
     private val notificationShadeWindowController: NotificationShadeWindowController,
     private val udfpsControllerProvider: Provider<UdfpsController>,
     private val statusBarStateController: StatusBarStateController,
+    private val displayMetrics: DisplayMetrics,
     private val featureFlags: FeatureFlags,
     private val logger: KeyguardLogger,
     private val biometricUnlockController: BiometricUnlockController,
+    private val lightRevealScrim: LightRevealScrim,
     rippleView: AuthRippleView?
 ) :
     ViewController<AuthRippleView>(rippleView),
+    CoreStartable,
     KeyguardStateController.Callback,
     WakefulnessLifecycle.Observer {
 
@@ -92,6 +96,10 @@
     private var udfpsController: UdfpsController? = null
     private var udfpsRadius: Float = -1f
 
+    override fun start() {
+        init()
+    }
+
     @VisibleForTesting
     public override fun onViewAttached() {
         authController.addCallback(authControllerCallback)
@@ -153,8 +161,8 @@
                         it.y,
                         0,
                         Math.max(
-                                Math.max(it.x, centralSurfaces.displayWidth.toInt() - it.x),
-                                Math.max(it.y, centralSurfaces.displayHeight.toInt() - it.y)
+                                Math.max(it.x, displayMetrics.widthPixels - it.x),
+                                Math.max(it.y, displayMetrics.heightPixels - it.y)
                         )
                 )
                 logger.showingUnlockRippleAt(it.x, it.y, "FP sensor radius: $udfpsRadius")
@@ -168,8 +176,8 @@
                         it.y,
                         0,
                         Math.max(
-                                Math.max(it.x, centralSurfaces.displayWidth.toInt() - it.x),
-                                Math.max(it.y, centralSurfaces.displayHeight.toInt() - it.y)
+                                Math.max(it.x, displayMetrics.widthPixels - it.x),
+                                Math.max(it.y, displayMetrics.heightPixels - it.y)
                         )
                 )
                 logger.showingUnlockRippleAt(it.x, it.y, "Face unlock ripple")
@@ -184,11 +192,10 @@
         // This code path is not used if the KeyguardTransitionRepository is managing the light
         // reveal scrim.
         if (!featureFlags.isEnabled(Flags.LIGHT_REVEAL_MIGRATION)) {
-            val lightRevealScrim = centralSurfaces.lightRevealScrim
             if (statusBarStateController.isDozing || biometricUnlockController.isWakeAndUnlock) {
                 circleReveal?.let {
-                    lightRevealScrim?.revealAmount = 0f
-                    lightRevealScrim?.revealEffect = it
+                    lightRevealScrim.revealAmount = 0f
+                    lightRevealScrim.revealEffect = it
                     startLightRevealScrimOnKeyguardFadingAway = true
                 }
             }
@@ -208,8 +215,7 @@
         }
 
         if (keyguardStateController.isKeyguardFadingAway) {
-            val lightRevealScrim = centralSurfaces.lightRevealScrim
-            if (startLightRevealScrimOnKeyguardFadingAway && lightRevealScrim != null) {
+            if (startLightRevealScrimOnKeyguardFadingAway) {
                 lightRevealScrimAnimator?.cancel()
                 lightRevealScrimAnimator = ValueAnimator.ofFloat(.1f, 1f).apply {
                     interpolator = Interpolators.LINEAR_OUT_SLOW_IN
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/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
index aabdafb..7a23759 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
@@ -83,6 +83,7 @@
 import com.android.systemui.flags.Flags;
 import com.android.systemui.keyguard.ScreenLifecycle;
 import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor;
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
 import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerInteractor;
 import com.android.systemui.log.SessionTracker;
 import com.android.systemui.plugins.FalsingManager;
@@ -151,6 +152,7 @@
     @NonNull private final DumpManager mDumpManager;
     @NonNull private final SystemUIDialogManager mDialogManager;
     @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+    @NonNull private final KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor;
     @NonNull private final VibratorHelper mVibrator;
     @NonNull private final FeatureFlags mFeatureFlags;
     @NonNull private final FalsingManager mFalsingManager;
@@ -818,7 +820,8 @@
             @NonNull AlternateBouncerInteractor alternateBouncerInteractor,
             @NonNull SecureSettings secureSettings,
             @NonNull InputManager inputManager,
-            @NonNull UdfpsUtils udfpsUtils) {
+            @NonNull UdfpsUtils udfpsUtils,
+            @NonNull KeyguardFaceAuthInteractor keyguardFaceAuthInteractor) {
         mContext = context;
         mExecution = execution;
         mVibrator = vibrator;
@@ -882,6 +885,7 @@
                     }
                     return Unit.INSTANCE;
                 });
+        mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor;
 
         final UdfpsOverlayController mUdfpsOverlayController = new UdfpsOverlayController();
         mFingerprintManager.setUdfpsOverlayController(mUdfpsOverlayController);
@@ -1141,6 +1145,7 @@
         if (!mOnFingerDown) {
             playStartHaptic();
 
+            mKeyguardFaceAuthInteractor.onUdfpsSensorTouched();
             if (!mKeyguardUpdateMonitor.isFaceDetectionRunning()) {
                 mKeyguardUpdateMonitor.requestFaceAuth(FaceAuthApiRequestReason.UDFPS_POINTER_DOWN);
             }
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/bluetooth/BroadcastDialog.java b/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialog.java
index 25b1e3a..83e61d6 100644
--- a/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialog.java
@@ -155,8 +155,7 @@
     }
 
     @Override
-    public void onStart() {
-        super.onStart();
+    public void start() {
         registerBroadcastCallBack(mExecutor, mBroadcastCallback);
     }
 
@@ -200,8 +199,7 @@
     }
 
     @Override
-    public void onStop() {
-        super.onStop();
+    public void stop() {
         unregisterBroadcastCallBack(mBroadcastCallback);
     }
 
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/common/shared/model/TintedIcon.kt b/packages/SystemUI/src/com/android/systemui/common/shared/model/TintedIcon.kt
index 6a6c3eb..0869351 100644
--- a/packages/SystemUI/src/com/android/systemui/common/shared/model/TintedIcon.kt
+++ b/packages/SystemUI/src/com/android/systemui/common/shared/model/TintedIcon.kt
@@ -16,10 +16,10 @@
 
 package com.android.systemui.common.shared.model
 
-import androidx.annotation.ColorRes
+import androidx.annotation.AttrRes
 
 /** Models an icon with a specific tint. */
 data class TintedIcon(
     val icon: Icon,
-    @ColorRes val tint: Int?,
+    @AttrRes val tint: Int?,
 )
diff --git a/packages/SystemUI/src/com/android/systemui/common/ui/binder/TintedIconViewBinder.kt b/packages/SystemUI/src/com/android/systemui/common/ui/binder/TintedIconViewBinder.kt
index bcc5932..5c5723f 100644
--- a/packages/SystemUI/src/com/android/systemui/common/ui/binder/TintedIconViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/common/ui/binder/TintedIconViewBinder.kt
@@ -17,6 +17,7 @@
 package com.android.systemui.common.ui.binder
 
 import android.widget.ImageView
+import com.android.settingslib.Utils
 import com.android.systemui.common.shared.model.TintedIcon
 
 object TintedIconViewBinder {
@@ -33,7 +34,7 @@
         IconViewBinder.bind(tintedIcon.icon, view)
         view.imageTintList =
             if (tintedIcon.tint != null) {
-                view.resources.getColorStateList(tintedIcon.tint, view.context.theme)
+                Utils.getColorAttr(view.context, tintedIcon.tint)
             } else {
                 null
             }
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/contrast/ContrastDialog.kt b/packages/SystemUI/src/com/android/systemui/contrast/ContrastDialog.kt
index 9e15c7e..f17d0f3 100644
--- a/packages/SystemUI/src/com/android/systemui/contrast/ContrastDialog.kt
+++ b/packages/SystemUI/src/com/android/systemui/contrast/ContrastDialog.kt
@@ -86,13 +86,11 @@
         highlightContrast(toContrastLevel(initialContrast))
     }
 
-    override fun onStart() {
-        super.onStart()
+    override fun start() {
         uiModeManager.addContrastChangeListener(mainExecutor, this)
     }
 
-    override fun onStop() {
-        super.onStop()
+    override fun stop() {
         uiModeManager.removeContrastChangeListener(this)
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsPopupMenu.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsPopupMenu.kt
index d08bc48..f7c8e96 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsPopupMenu.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsPopupMenu.kt
@@ -20,11 +20,18 @@
 import android.content.res.Resources
 import android.graphics.drawable.ColorDrawable
 import android.graphics.drawable.Drawable
-import android.view.Gravity
+import android.view.Gravity.END
+import android.view.Gravity.GravityFlags
+import android.view.Gravity.NO_GRAVITY
+import android.view.Gravity.START
 import android.view.View
+import android.view.View.MeasureSpec
+import android.view.ViewGroup
 import android.widget.ListPopupWindow
+import android.widget.ListView
 import android.widget.PopupWindow
 import com.android.systemui.R
+import kotlin.math.max
 
 class ControlsPopupMenu(context: Context) : ListPopupWindow(context) {
 
@@ -40,13 +47,13 @@
     private val dimDrawable: Drawable = ColorDrawable(resources.getColor(R.color.control_popup_dim))
 
     private var dismissListener: PopupWindow.OnDismissListener? = null
+    @GravityFlags private var dropDownGravity: Int = NO_GRAVITY
 
     init {
         setBackgroundDrawable(dialogBackground)
 
         inputMethodMode = INPUT_METHOD_NOT_NEEDED
         isModal = true
-        setDropDownGravity(Gravity.START)
 
         // dismiss method isn't called when popup is hidden by outside touch. So we need to
         // override a listener to remove a dimming foreground
@@ -59,30 +66,68 @@
     override fun show() {
         // need to call show() first in order to construct the listView
         super.show()
-
-        val paddedWidth = resources.displayMetrics.widthPixels - 2 * horizontalMargin
-        width = maxWidth.coerceAtMost(paddedWidth)
+        updateWidth()
         anchorView?.let {
-            horizontalOffset = -width / 2 + it.width / 2
-            verticalOffset = -it.height / 2
-            if (it.layoutDirection == View.LAYOUT_DIRECTION_RTL) {
-                horizontalOffset = -horizontalOffset
-            }
-
+            positionPopup(it)
             it.rootView.foreground = dimDrawable
         }
-
         with(listView!!) {
             clipToOutline = true
             background = dialogBackground
             dividerHeight = listDividerHeight
         }
-
         // actual show takes into account updated ListView specs
         super.show()
     }
 
+    override fun setDropDownGravity(@GravityFlags gravity: Int) {
+        super.setDropDownGravity(gravity)
+        dropDownGravity = gravity
+    }
+
     override fun setOnDismissListener(listener: PopupWindow.OnDismissListener?) {
         dismissListener = listener
     }
+
+    private fun updateWidth() {
+        val paddedWidth = resources.displayMetrics.widthPixels - 2 * horizontalMargin
+        val maxWidth = maxWidth.coerceAtMost(paddedWidth)
+        when (width) {
+            ViewGroup.LayoutParams.MATCH_PARENT -> {
+                width = maxWidth
+            }
+            ViewGroup.LayoutParams.WRAP_CONTENT -> {
+                width = listView!!.measureDesiredWidth(maxWidth).coerceAtMost(maxWidth)
+            }
+        }
+    }
+
+    private fun positionPopup(anchorView: View) {
+        when (dropDownGravity) {
+            NO_GRAVITY -> {
+                horizontalOffset = (-width + anchorView.width) / 2
+                if (anchorView.layoutDirection == View.LAYOUT_DIRECTION_RTL) {
+                    horizontalOffset = -horizontalOffset
+                }
+            }
+            END,
+            START -> {
+                horizontalOffset = 0
+            }
+        }
+        verticalOffset = -anchorView.height / 2
+    }
+
+    private fun ListView.measureDesiredWidth(maxWidth: Int): Int {
+        var maxItemWidth = 0
+        repeat(adapter.count) {
+            val view = adapter.getView(it, null, listView)
+            view.measure(
+                MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.AT_MOST),
+                MeasureSpec.UNSPECIFIED
+            )
+            maxItemWidth = max(maxItemWidth, view.measuredWidth)
+        }
+        return maxItemWidth
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
index d4ce9b6..92607c6 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
@@ -34,6 +34,7 @@
 import android.service.controls.ControlsProviderService
 import android.util.Log
 import android.view.ContextThemeWrapper
+import android.view.Gravity
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -72,7 +73,6 @@
 import com.android.systemui.dump.DumpManager
 import com.android.systemui.flags.FeatureFlags
 import com.android.systemui.flags.Flags
-import com.android.systemui.globalactions.GlobalActionsPopupMenu
 import com.android.systemui.plugins.ActivityStarter
 import com.android.systemui.settings.UserTracker
 import com.android.systemui.statusbar.policy.KeyguardStateController
@@ -540,12 +540,12 @@
         val anchor = parent.requireViewById<ImageView>(R.id.controls_more)
         anchor.setOnClickListener(object : View.OnClickListener {
             override fun onClick(v: View) {
-                popup = GlobalActionsPopupMenu(
-                        popupThemedContext,
-                        false /* isDropDownMode */
-                ).apply {
-                    setAnchorView(anchor)
+                popup = ControlsPopupMenu(popupThemedContext).apply {
+                    width = ViewGroup.LayoutParams.WRAP_CONTENT
+                    anchorView = anchor
+                    setDropDownGravity(Gravity.END)
                     setAdapter(adapter)
+
                     setOnItemClickListener(object : AdapterView.OnItemClickListener {
                         override fun onItemClick(
                             parent: AdapterView<*>,
@@ -618,7 +618,8 @@
         anchor.setOnClickListener(object : View.OnClickListener {
             override fun onClick(v: View) {
                 popup = ControlsPopupMenu(popupThemedContext).apply {
-                    setAnchorView(anchor)
+                    anchorView = anchor
+                    width = ViewGroup.LayoutParams.MATCH_PARENT
                     setAdapter(adapter)
 
                     setOnItemClickListener(object : AdapterView.OnItemClickListener {
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
index 0be3bb6..0dcba50 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
@@ -50,6 +50,7 @@
 import android.content.pm.ShortcutManager;
 import android.content.res.AssetManager;
 import android.content.res.Resources;
+import android.graphics.Color;
 import android.hardware.SensorManager;
 import android.hardware.SensorPrivacyManager;
 import android.hardware.biometrics.BiometricManager;
@@ -113,13 +114,13 @@
 import com.android.systemui.dagger.qualifiers.TestHarness;
 import com.android.systemui.shared.system.PackageManagerWrapper;
 
+import dagger.Module;
+import dagger.Provides;
+
 import java.util.Optional;
 
 import javax.inject.Singleton;
 
-import dagger.Module;
-import dagger.Provides;
-
 /**
  * Provides Non-SystemUI, Framework-Owned instances to the dependency graph.
  */
@@ -323,7 +324,9 @@
     @Provides
     @Singleton
     static InteractionJankMonitor provideInteractionJankMonitor() {
-        return InteractionJankMonitor.getInstance();
+        InteractionJankMonitor jankMonitor = InteractionJankMonitor.getInstance();
+        jankMonitor.configDebugOverlay(Color.YELLOW, 0.75);
+        return jankMonitor;
     }
 
     @Provides
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
index 9bf6b2a..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
@@ -66,7 +67,7 @@
  */
 @Module(includes = [
     MultiUserUtilsModule::class,
-    StartControlsStartableModule::class
+    StartControlsStartableModule::class,
 ])
 abstract class SystemUICoreStartableModule {
     /** Inject into AuthController.  */
@@ -75,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..dff2c0e 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 {
 
@@ -282,7 +288,7 @@
             INotificationManager notificationManager,
             IDreamManager dreamManager,
             NotificationVisibilityProvider visibilityProvider,
-            NotificationInterruptStateProvider interruptionStateProvider,
+            VisualInterruptionDecisionProvider visualInterruptionDecisionProvider,
             ZenModeController zenModeController,
             NotificationLockscreenUserManager notifUserManager,
             CommonNotifCollection notifCollection,
@@ -300,7 +306,7 @@
                 notificationManager,
                 dreamManager,
                 visibilityProvider,
-                interruptionStateProvider,
+                visualInterruptionDecisionProvider,
                 zenModeController,
                 notifUserManager,
                 notifCollection,
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/DreamOverlayTouchMonitor.java b/packages/SystemUI/src/com/android/systemui/dreams/touch/DreamOverlayTouchMonitor.java
index 7f44463..aca621b 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/touch/DreamOverlayTouchMonitor.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/touch/DreamOverlayTouchMonitor.java
@@ -41,6 +41,7 @@
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Set;
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
@@ -195,7 +196,14 @@
          * Called by the monitor when this session is removed.
          */
         private void onRemoved() {
-            mCallbacks.forEach(callback -> callback.onRemoved());
+            mEventListeners.clear();
+            mGestureListeners.clear();
+            final Iterator<Callback> iter = mCallbacks.iterator();
+            while (iter.hasNext()) {
+                final Callback callback = iter.next();
+                callback.onRemoved();
+                iter.remove();
+            }
         }
 
         @Override
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/dump/DumpManager.kt b/packages/SystemUI/src/com/android/systemui/dump/DumpManager.kt
index 276a290..7d1ffca 100644
--- a/packages/SystemUI/src/com/android/systemui/dump/DumpManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/dump/DumpManager.kt
@@ -39,6 +39,11 @@
     private val dumpables: MutableMap<String, RegisteredDumpable<Dumpable>> = ArrayMap()
     private val buffers: MutableMap<String, RegisteredDumpable<LogBuffer>> = ArrayMap()
 
+    /** See [registerCriticalDumpable]. */
+    fun registerCriticalDumpable(module: Dumpable) {
+        registerCriticalDumpable(module::class.java.simpleName, module)
+    }
+
     /**
      * Registers a dumpable to be called during the CRITICAL section of the bug report.
      *
diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
index 012c8cf..05153b6 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
+++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
@@ -58,19 +58,9 @@
             "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")
 
-    // TODO(b/254512425): Tracking Bug
-    val NOTIFICATION_MEMORY_MONITOR_ENABLED =
-        releasedFlag(112, "notification_memory_monitor_enabled")
-
     /**
      * This flag is server-controlled and should stay as [unreleasedFlag] since we never want to
      * enable it on release builds.
@@ -78,47 +68,28 @@
     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 =
         unreleasedFlag(271161129, "notification_shelf_refactor")
 
-    // TODO(b/263414400): Tracking Bug
-    @JvmField
-    val NOTIFICATION_ANIMATE_BIG_PICTURE =
-        releasedFlag(120, "notification_animate_big_picture")
-
     @JvmField
     val ANIMATED_NOTIFICATION_SHADE_INSETS =
         releasedFlag(270682168, "animated_notification_shade_insets")
 
     // TODO(b/268005230): Tracking Bug
-    @JvmField val SENSITIVE_REVEAL_ANIM = unreleasedFlag(268005230, "sensitive_reveal_anim")
+    @JvmField
+    val SENSITIVE_REVEAL_ANIM =
+        unreleasedFlag(268005230, "sensitive_reveal_anim", teamfood = true)
 
     // 200 - keyguard/lockscreen
     // ** Flag retired **
@@ -234,7 +205,7 @@
     /** Whether to inflate the bouncer view on a background thread. */
     // TODO(b/273341787): Tracking Bug
     @JvmField
-    val PREVENT_BYPASS_KEYGUARD = unreleasedFlag(230, "prevent_bypass_keyguard", teamfood = true)
+    val PREVENT_BYPASS_KEYGUARD = releasedFlag(230, "prevent_bypass_keyguard")
 
     /** Whether to use a new data source for intents to run on keyguard dismissal. */
     @JvmField
@@ -286,6 +257,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 =
@@ -334,8 +309,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
@@ -411,7 +385,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")
@@ -605,25 +579,10 @@
     // TODO(b/254512507): Tracking Bug
     val CHOOSER_UNBUNDLED = releasedFlag(1500, "chooser_unbundled")
 
-    // TODO(b/266983432) Tracking Bug
-    val SHARESHEET_CUSTOM_ACTIONS = releasedFlag(1501, "sharesheet_custom_actions")
-
-    // 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")
 
@@ -659,7 +618,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
@@ -701,6 +661,11 @@
     val KEYBOARD_BACKLIGHT_INDICATOR =
             unreleasedFlag(2601, "keyboard_backlight_indicator", teamfood = true)
 
+    // TODO(b/277192623): Tracking Bug
+    @JvmField
+    val KEYBOARD_EDUCATION =
+        unreleasedFlag(2603, "keyboard_education", teamfood = false)
+
     // TODO(b/272036292): Tracking Bug
     @JvmField
     val LARGE_SHADE_GRANULAR_ALPHA_INTERPOLATION =
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 07753ca..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;
@@ -2477,8 +2472,7 @@
         }
 
         @Override
-        protected void onStart() {
-            super.onStart();
+        protected void start() {
             mGlobalActionsLayout.updateList();
 
             if (mBackgroundDrawable instanceof ScrimDrawable) {
@@ -2509,8 +2503,7 @@
         }
 
         @Override
-        protected void onStop() {
-            super.onStop();
+        protected void stop() {
             mColorExtractor.removeOnColorsChangedListener(this);
         }
 
diff --git a/packages/SystemUI/src/com/android/systemui/graphics/ImageLoader.kt b/packages/SystemUI/src/com/android/systemui/graphics/ImageLoader.kt
index 801b165..c41b5e4 100644
--- a/packages/SystemUI/src/com/android/systemui/graphics/ImageLoader.kt
+++ b/packages/SystemUI/src/com/android/systemui/graphics/ImageLoader.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.android.systemui.graphics
 
 import android.annotation.AnyThread
@@ -20,6 +36,7 @@
 import android.util.Size
 import androidx.core.content.res.ResourcesCompat
 import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
 import com.android.systemui.dagger.qualifiers.Background
 import java.io.IOException
 import javax.inject.Inject
@@ -35,7 +52,7 @@
 class ImageLoader
 @Inject
 constructor(
-    private val defaultContext: Context,
+    @Application private val defaultContext: Context,
     @Background private val backgroundDispatcher: CoroutineDispatcher
 ) {
 
diff --git a/packages/SystemUI/src/com/android/systemui/keyboard/data/repository/KeyboardRepository.kt b/packages/SystemUI/src/com/android/systemui/keyboard/data/repository/KeyboardRepository.kt
index b86083a..1f13291 100644
--- a/packages/SystemUI/src/com/android/systemui/keyboard/data/repository/KeyboardRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyboard/data/repository/KeyboardRepository.kt
@@ -106,7 +106,7 @@
     }
 
     private fun isPhysicalFullKeyboard(deviceId: Int): Boolean {
-        val device = inputManager.getInputDevice(deviceId)
+        val device = inputManager.getInputDevice(deviceId) ?: return false
         return !device.isVirtual && device.isFullKeyboard
     }
 
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/KeyguardUnlockAnimationController.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
index 9ab2e99..2925d8d 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
@@ -791,8 +791,9 @@
 
             // Translate up from the bottom.
             surfaceBehindMatrix.setTranslate(
-                    surfaceBehindRemoteAnimationTarget.screenSpaceBounds.left.toFloat(),
-                    surfaceHeight * SURFACE_BEHIND_START_TRANSLATION_Y * (1f - amount)
+                    surfaceBehindRemoteAnimationTarget.localBounds.left.toFloat(),
+                    surfaceBehindRemoteAnimationTarget.localBounds.top.toFloat() +
+                            surfaceHeight * SURFACE_BEHIND_START_TRANSLATION_Y * (1f - amount)
             )
 
             // Scale up from a point at the center-bottom of the surface.
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 416b237..93ddfba 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;
+        }
     };
 
     /**
@@ -1605,8 +1610,9 @@
     }
 
     private void doKeyguardLaterForChildProfilesLocked() {
-        UserManager um = UserManager.get(mContext);
-        for (int profileId : um.getEnabledProfileIds(UserHandle.myUserId())) {
+        for (UserInfo profile : mUserTracker.getUserProfiles()) {
+            if (!profile.isEnabled()) continue;
+            final int profileId = profile.id;
             if (mLockPatternUtils.isSeparateProfileChallengeEnabled(profileId)) {
                 long userTimeout = getLockTimeout(profileId);
                 if (userTimeout == 0) {
@@ -1629,8 +1635,9 @@
     }
 
     private void doKeyguardForChildProfilesLocked() {
-        UserManager um = UserManager.get(mContext);
-        for (int profileId : um.getEnabledProfileIds(UserHandle.myUserId())) {
+        for (UserInfo profile : mUserTracker.getUserProfiles()) {
+            if (!profile.isEnabled()) continue;
+            final int profileId = profile.id;
             if (mLockPatternUtils.isSeparateProfileChallengeEnabled(profileId)) {
                 lockProfile(profileId);
             }
@@ -1952,11 +1959,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 +2038,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 +2233,7 @@
                     handleHide();
                     break;
                 case RESET:
-                    handleReset();
+                    handleReset(msg.arg1 != 0);
                     break;
                 case VERIFY_UNLOCK:
                     Trace.beginSection("KeyguardViewMediator#handleMessage VERIFY_UNLOCK");
@@ -3003,10 +3015,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 +3105,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/dagger/KeyguardFaceAuthNotSupportedModule.kt b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardFaceAuthNotSupportedModule.kt
new file mode 100644
index 0000000..a44df7e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardFaceAuthNotSupportedModule.kt
@@ -0,0 +1,35 @@
+/*
+ *   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.keyguard.dagger
+
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor
+import com.android.systemui.keyguard.domain.interactor.NoopKeyguardFaceAuthInteractor
+import dagger.Binds
+import dagger.Module
+
+/**
+ * Module that provides bindings for face auth classes that are injected into SysUI components that
+ * are used across different SysUI variants, where face auth is not supported.
+ *
+ * Some variants that do not support face authentication can install this module to provide a no-op
+ * implementation of the interactor.
+ */
+@Module
+interface KeyguardFaceAuthNotSupportedModule {
+    @Binds
+    fun keyguardFaceAuthInteractor(impl: NoopKeyguardFaceAuthInteractor): KeyguardFaceAuthInteractor
+}
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 0abce82..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
@@ -34,6 +34,7 @@
 import com.android.systemui.dump.DumpManager
 import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
 import com.android.systemui.keyguard.shared.model.AcquiredAuthenticationStatus
 import com.android.systemui.keyguard.shared.model.AuthenticationStatus
 import com.android.systemui.keyguard.shared.model.DetectionStatus
@@ -44,6 +45,8 @@
 import com.android.systemui.keyguard.shared.model.WakefulnessModel
 import com.android.systemui.log.FaceAuthenticationLogger
 import com.android.systemui.log.SessionTracker
+import com.android.systemui.log.table.TableLogBuffer
+import com.android.systemui.log.table.logDiffsForTable
 import com.android.systemui.statusbar.phone.KeyguardBypassController
 import com.android.systemui.user.data.repository.UserRepository
 import java.io.PrintWriter
@@ -78,7 +81,7 @@
     val isAuthenticated: Flow<Boolean>
 
     /** Whether face auth can run at this point. */
-    val canRunFaceAuth: Flow<Boolean>
+    val canRunFaceAuth: StateFlow<Boolean>
 
     /** Provide the current status of face authentication. */
     val authenticationStatus: Flow<AuthenticationStatus>
@@ -87,10 +90,10 @@
     val detectionStatus: Flow<DetectionStatus>
 
     /** Current state of whether face authentication is locked out or not. */
-    val isLockedOut: Flow<Boolean>
+    val isLockedOut: StateFlow<Boolean>
 
     /** Current state of whether face authentication is running. */
-    val isAuthRunning: Flow<Boolean>
+    val isAuthRunning: StateFlow<Boolean>
 
     /** Whether bypass is currently enabled */
     val isBypassEnabled: Flow<Boolean>
@@ -129,13 +132,18 @@
     private val keyguardRepository: KeyguardRepository,
     private val keyguardInteractor: KeyguardInteractor,
     private val alternateBouncerInteractor: AlternateBouncerInteractor,
+    @FaceDetectTableLog private val faceDetectLog: TableLogBuffer,
+    @FaceAuthTableLog private val faceAuthLog: TableLogBuffer,
+    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
     dumpManager: DumpManager,
 ) : DeviceEntryFaceAuthRepository, Dumpable {
     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)
@@ -207,14 +215,30 @@
         observeFaceAuthGatingChecks()
         observeFaceDetectGatingChecks()
         observeFaceAuthResettingConditions()
+        listenForSchedulingWatchdog()
+    }
+
+    private fun listenForSchedulingWatchdog() {
+        keyguardTransitionInteractor.anyStateToGoneTransition
+            .onEach { faceManager?.scheduleWatchdog() }
+            .launchIn(applicationScope)
     }
 
     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)
@@ -224,17 +248,19 @@
         // Face detection can run only when lockscreen bypass is enabled
         // & detection is supported & biometric unlock is not allowed.
         listOf(
-                canFaceAuthOrDetectRun(),
-                logAndObserve(isBypassEnabled, "isBypassEnabled"),
+                canFaceAuthOrDetectRun(faceDetectLog),
+                logAndObserve(isBypassEnabled, "isBypassEnabled", faceDetectLog),
                 logAndObserve(
                     biometricSettingsRepository.isNonStrongBiometricAllowed.isFalse(),
-                    "nonStrongBiometricIsNotAllowed"
+                    "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"
+                    "udfpsAuthIsNotPossibleAnymore",
+                    faceDetectLog
                 )
             )
             .reduce(::and)
@@ -246,6 +272,7 @@
                     cancelDetection()
                 }
             }
+            .logDiffsForTable(faceDetectLog, "", "canFaceDetectRun", false)
             .launchIn(applicationScope)
     }
 
@@ -254,43 +281,54 @@
             it == BiometricType.UNDER_DISPLAY_FINGERPRINT
         }
 
-    private fun canFaceAuthOrDetectRun(): Flow<Boolean> {
+    private fun canFaceAuthOrDetectRun(tableLogBuffer: TableLogBuffer): Flow<Boolean> {
         return listOf(
-                logAndObserve(biometricSettingsRepository.isFaceEnrolled, "isFaceEnrolled"),
+                logAndObserve(
+                    biometricSettingsRepository.isFaceEnrolled,
+                    "isFaceEnrolled",
+                    tableLogBuffer
+                ),
                 logAndObserve(
                     biometricSettingsRepository.isFaceAuthenticationEnabled,
-                    "isFaceAuthenticationEnabled"
+                    "isFaceAuthenticationEnabled",
+                    tableLogBuffer
                 ),
                 logAndObserve(
                     userRepository.userSwitchingInProgress.isFalse(),
-                    "userSwitchingNotInProgress"
+                    "userSwitchingNotInProgress",
+                    tableLogBuffer
                 ),
                 logAndObserve(
                     keyguardRepository.isKeyguardGoingAway.isFalse(),
-                    "keyguardNotGoingAway"
+                    "keyguardNotGoingAway",
+                    tableLogBuffer
                 ),
                 logAndObserve(
                     keyguardRepository.wakefulness
                         .map { WakefulnessModel.isSleepingOrStartingToSleep(it) }
                         .isFalse(),
-                    "deviceNotSleepingOrNotStartingToSleep"
+                    "deviceNotSleepingOrNotStartingToSleep",
+                    tableLogBuffer
                 ),
                 logAndObserve(
                     combine(
                         keyguardInteractor.isSecureCameraActive,
-                        alternateBouncerInteractor.isVisible,
+                        alternateBouncerInteractor.isVisible
                     ) { a, b ->
                         !a || b
                     },
-                    "secureCameraNotActiveOrAltBouncerIsShowing"
+                    "secureCameraNotActiveOrAltBouncerIsShowing",
+                    tableLogBuffer
                 ),
                 logAndObserve(
                     biometricSettingsRepository.isFaceAuthSupportedInCurrentPosture,
-                    "isFaceAuthSupportedInCurrentPosture"
+                    "isFaceAuthSupportedInCurrentPosture",
+                    tableLogBuffer
                 ),
                 logAndObserve(
                     biometricSettingsRepository.isCurrentUserInLockdown.isFalse(),
-                    "userHasNotLockedDownDevice"
+                    "userHasNotLockedDownDevice",
+                    tableLogBuffer
                 )
             )
             .reduce(::and)
@@ -299,20 +337,22 @@
     private fun observeFaceAuthGatingChecks() {
         // Face auth can run only if all of the gating conditions are true.
         listOf(
-                canFaceAuthOrDetectRun(),
-                logAndObserve(isLockedOut.isFalse(), "isNotLocked"),
+                canFaceAuthOrDetectRun(faceAuthLog),
+                logAndObserve(isLockedOut.isFalse(), "isNotInLockOutState", faceAuthLog),
                 logAndObserve(
                     deviceEntryFingerprintAuthRepository.isLockedOut.isFalse(),
-                    "fpLockedOut"
+                    "fpIsNotLockedOut",
+                    faceAuthLog
                 ),
-                logAndObserve(trustRepository.isCurrentUserTrusted.isFalse(), "currentUserTrusted"),
+                logAndObserve(
+                    trustRepository.isCurrentUserTrusted.isFalse(),
+                    "currentUserIsNotTrusted",
+                    faceAuthLog
+                ),
                 logAndObserve(
                     biometricSettingsRepository.isNonStrongBiometricAllowed,
-                    "nonStrongBiometricIsAllowed"
-                ),
-                logAndObserve(
-                    userRepository.selectedUserInfo.map { it.isPrimary },
-                    "userIsPrimaryUser"
+                    "nonStrongBiometricIsAllowed",
+                    faceAuthLog
                 ),
             )
             .reduce(::and)
@@ -326,6 +366,7 @@
                     cancel()
                 }
             }
+            .logDiffsForTable(faceAuthLog, "", "canFaceAuthRun", false)
             .launchIn(applicationScope)
     }
 
@@ -340,7 +381,6 @@
 
             override fun onAuthenticationAcquired(acquireInfo: Int) {
                 _authenticationStatus.value = AcquiredAuthenticationStatus(acquireInfo)
-                faceAuthLogger.authenticationAcquired(acquireInfo)
             }
 
             override fun onAuthenticationError(errorCode: Int, errString: CharSequence?) {
@@ -351,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,
@@ -384,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
@@ -401,7 +467,7 @@
 
     override suspend fun authenticate(uiEvent: FaceAuthUiEvent, fallbackToDetection: Boolean) {
         if (_isAuthRunning.value) {
-            faceAuthLogger.ignoredFaceAuthTrigger(uiEvent)
+            faceAuthLogger.ignoredFaceAuthTrigger(uiEvent, "face auth is currently running")
             return
         }
 
@@ -438,7 +504,16 @@
                 )
             }
         } else if (fallbackToDetection && canRunDetection.value) {
+            faceAuthLogger.ignoredFaceAuthTrigger(
+                uiEvent,
+                "face auth gating check is false, falling back to detection."
+            )
             detect()
+        } else {
+            faceAuthLogger.ignoredFaceAuthTrigger(
+                uiEvent,
+                "face auth & detect gating check is false"
+            )
         }
     }
 
@@ -467,7 +542,7 @@
     private val currentUserId: Int
         get() = userRepository.getSelectedUserInfo().id
 
-    fun cancelDetection() {
+    private fun cancelDetection() {
         detectCancellationSignal?.cancel()
         detectCancellationSignal = null
     }
@@ -491,10 +566,20 @@
         _isAuthRunning.value = false
     }
 
-    private fun logAndObserve(cond: Flow<Boolean>, loggingContext: String): Flow<Boolean> {
-        return cond.distinctUntilChanged().onEach {
-            faceAuthLogger.observedConditionChanged(it, loggingContext)
-        }
+    private fun logAndObserve(
+        cond: Flow<Boolean>,
+        conditionName: String,
+        logBuffer: TableLogBuffer
+    ): Flow<Boolean> {
+        return cond
+            .distinctUntilChanged()
+            .logDiffsForTable(
+                logBuffer,
+                columnName = conditionName,
+                columnPrefix = "",
+                initialValue = false
+            )
+            .onEach { faceAuthLogger.observedConditionChanged(it, conditionName) }
     }
 
     companion object {
@@ -505,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/data/repository/FaceAuthTableLog.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/FaceAuthTableLog.kt
new file mode 100644
index 0000000..6c23032
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/FaceAuthTableLog.kt
@@ -0,0 +1,25 @@
+/*
+ *   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.keyguard.data.repository
+
+import javax.inject.Qualifier
+
+/** Face auth logs in table format. */
+@Qualifier
+@MustBeDocumented
+@Retention(AnnotationRetention.RUNTIME)
+annotation class FaceAuthTableLog
diff --git a/core/java/com/android/internal/expresslog/Utils.java b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/FaceDetectTableLog.kt
similarity index 72%
rename from core/java/com/android/internal/expresslog/Utils.java
rename to packages/SystemUI/src/com/android/systemui/keyguard/data/repository/FaceDetectTableLog.kt
index d82192f..342064f 100644
--- a/core/java/com/android/internal/expresslog/Utils.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/FaceDetectTableLog.kt
@@ -14,8 +14,12 @@
  * limitations under the License.
  */
 
-package com.android.internal.expresslog;
+package com.android.systemui.keyguard.data.repository
 
-final class Utils {
-    static native long hashString(String stringToHash);
-}
+import javax.inject.Qualifier
+
+/** Face detect logs in table format. */
+@Qualifier
+@MustBeDocumented
+@Retention(AnnotationRetention.RUNTIME)
+annotation class FaceDetectTableLog
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardFaceAuthModule.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardFaceAuthModule.kt
index 3c66f24..ef8b401 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardFaceAuthModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardFaceAuthModule.kt
@@ -17,8 +17,17 @@
 
 package com.android.systemui.keyguard.data.repository
 
+import com.android.systemui.CoreStartable
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor
+import com.android.systemui.keyguard.domain.interactor.SystemUIKeyguardFaceAuthInteractor
+import com.android.systemui.log.table.TableLogBuffer
+import com.android.systemui.log.table.TableLogBufferFactory
 import dagger.Binds
 import dagger.Module
+import dagger.Provides
+import dagger.multibindings.ClassKey
+import dagger.multibindings.IntoMap
 
 @Module
 interface KeyguardFaceAuthModule {
@@ -27,5 +36,31 @@
         impl: DeviceEntryFaceAuthRepositoryImpl
     ): DeviceEntryFaceAuthRepository
 
+    @Binds
+    @IntoMap
+    @ClassKey(SystemUIKeyguardFaceAuthInteractor::class)
+    fun bind(impl: SystemUIKeyguardFaceAuthInteractor): CoreStartable
+
+    @Binds
+    fun keyguardFaceAuthInteractor(
+        impl: SystemUIKeyguardFaceAuthInteractor
+    ): KeyguardFaceAuthInteractor
+
     @Binds fun trustRepository(impl: TrustRepositoryImpl): TrustRepository
+
+    companion object {
+        @Provides
+        @SysUISingleton
+        @FaceAuthTableLog
+        fun provideFaceAuthTableLog(factory: TableLogBufferFactory): TableLogBuffer {
+            return factory.create("FaceAuthTableLog", 100)
+        }
+
+        @Provides
+        @SysUISingleton
+        @FaceDetectTableLog
+        fun provideFaceDetectTableLog(factory: TableLogBufferFactory): TableLogBuffer {
+            return factory.create("FaceDetectTableLog", 100)
+        }
+    }
 }
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
new file mode 100644
index 0000000..74ef7a5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractor.kt
@@ -0,0 +1,79 @@
+/*
+ *   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.keyguard.domain.interactor
+
+import com.android.systemui.keyguard.shared.model.AuthenticationStatus
+import com.android.systemui.keyguard.shared.model.DetectionStatus
+import kotlinx.coroutines.flow.Flow
+
+/**
+ * Interactor that exposes API to get the face authentication status and handle any events that can
+ * cause face authentication to run.
+ */
+interface KeyguardFaceAuthInteractor {
+
+    /** Current authentication status */
+    val authenticationStatus: Flow<AuthenticationStatus>
+
+    /** Current detection status */
+    val detectionStatus: Flow<DetectionStatus>
+
+    /** Can face auth be run right now */
+    fun canFaceAuthRun(): Boolean
+
+    /** Whether face auth is currently running or not. */
+    fun isRunning(): Boolean
+
+    /** Whether face auth is in lock out state. */
+    fun isLockedOut(): Boolean
+
+    /**
+     * Register listener for use from code that cannot use [authenticationStatus] or
+     * [detectionStatus]
+     */
+    fun registerListener(listener: FaceAuthenticationListener)
+
+    /** Unregister previously registered listener */
+    fun unregisterListener(listener: FaceAuthenticationListener)
+
+    /** Whether the face auth interactor is enabled or not. */
+    fun isEnabled(): Boolean
+
+    fun onUdfpsSensorTouched()
+    fun onAssistantTriggeredOnLockScreen()
+    fun onDeviceLifted()
+    fun onQsExpansionStared()
+    fun onNotificationPanelClicked()
+    fun onSwipeUpOnBouncer()
+    fun onPrimaryBouncerUserInput()
+}
+
+/**
+ * Listener that can be registered with the [KeyguardFaceAuthInteractor] to receive updates about
+ * face authentication & detection updates.
+ *
+ * This is present to make it easier for use the new face auth API for code that cannot use
+ * [KeyguardFaceAuthInteractor.authenticationStatus] or [KeyguardFaceAuthInteractor.detectionStatus]
+ * flows.
+ */
+interface FaceAuthenticationListener {
+    /** Receive face authentication status updates */
+    fun onAuthenticationStatusChanged(status: AuthenticationStatus)
+
+    /** Receive status updates whenever face detection runs */
+    fun onDetectionStatusChanged(status: DetectionStatus)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt
index aabd212..da0ada1 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt
@@ -78,6 +78,14 @@
     val primaryBouncerToGoneTransition: Flow<TransitionStep> =
         repository.transition(PRIMARY_BOUNCER, GONE)
 
+    /** OFF->LOCKSCREEN transition information. */
+    val offToLockscreenTransition: Flow<TransitionStep> =
+        repository.transition(KeyguardState.OFF, LOCKSCREEN)
+
+    /** DOZING->LOCKSCREEN transition information. */
+    val dozingToLockscreenTransition: Flow<TransitionStep> =
+        repository.transition(KeyguardState.DOZING, LOCKSCREEN)
+
     /**
      * AOD<->LOCKSCREEN transition information, mapped to dozeAmount range of AOD (1f) <->
      * Lockscreen (0f).
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
new file mode 100644
index 0000000..5005b6c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/NoopKeyguardFaceAuthInteractor.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.keyguard.domain.interactor
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.shared.model.AuthenticationStatus
+import com.android.systemui.keyguard.shared.model.DetectionStatus
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.emptyFlow
+
+/**
+ * Implementation of the interactor that noops all face auth operations.
+ *
+ * This is required for SystemUI variants that do not support face authentication but still inject
+ * other SysUI components that depend on [KeyguardFaceAuthInteractor]
+ */
+@SysUISingleton
+class NoopKeyguardFaceAuthInteractor @Inject constructor() : KeyguardFaceAuthInteractor {
+    override val authenticationStatus: Flow<AuthenticationStatus>
+        get() = emptyFlow()
+    override val detectionStatus: Flow<DetectionStatus>
+        get() = emptyFlow()
+
+    override fun canFaceAuthRun(): Boolean = false
+
+    override fun isRunning(): Boolean = false
+
+    override fun isLockedOut(): Boolean = false
+
+    override fun isEnabled() = false
+
+    override fun registerListener(listener: FaceAuthenticationListener) {}
+
+    override fun unregisterListener(listener: FaceAuthenticationListener) {}
+
+    override fun onUdfpsSensorTouched() {}
+
+    override fun onAssistantTriggeredOnLockScreen() {}
+
+    override fun onDeviceLifted() {}
+
+    override fun onQsExpansionStared() {}
+
+    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
new file mode 100644
index 0000000..6b515da
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt
@@ -0,0 +1,204 @@
+/*
+ *   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.keyguard.domain.interactor
+
+import com.android.keyguard.FaceAuthUiEvent
+import com.android.keyguard.KeyguardUpdateMonitor
+import com.android.systemui.CoreStartable
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.keyguard.data.repository.DeviceEntryFaceAuthRepository
+import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.log.FaceAuthenticationLogger
+import com.android.systemui.util.kotlin.pairwise
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.merge
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.launch
+
+/**
+ * Encapsulates business logic related face authentication being triggered for device entry from
+ * SystemUI Keyguard.
+ */
+@SysUISingleton
+class SystemUIKeyguardFaceAuthInteractor
+@Inject
+constructor(
+    @Application private val applicationScope: CoroutineScope,
+    @Main private val mainDispatcher: CoroutineDispatcher,
+    private val repository: DeviceEntryFaceAuthRepository,
+    private val primaryBouncerInteractor: PrimaryBouncerInteractor,
+    private val alternateBouncerInteractor: AlternateBouncerInteractor,
+    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
+    private val featureFlags: FeatureFlags,
+    private val faceAuthenticationLogger: FaceAuthenticationLogger,
+    private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
+) : CoreStartable, KeyguardFaceAuthInteractor {
+
+    private val listeners: MutableList<FaceAuthenticationListener> = mutableListOf()
+
+    override fun start() {
+        if (!isEnabled()) {
+            return
+        }
+        // This is required because fingerprint state required for the face auth repository is
+        // backed by KeyguardUpdateMonitor. KeyguardUpdateMonitor constructor accesses the biometric
+        // state which makes lazy injection not an option.
+        keyguardUpdateMonitor.setFaceAuthInteractor(this)
+        observeFaceAuthStateUpdates()
+        faceAuthenticationLogger.interactorStarted()
+        primaryBouncerInteractor.isShowing
+            .whenItFlipsToTrue()
+            .onEach {
+                faceAuthenticationLogger.bouncerVisibilityChanged()
+                runFaceAuth(
+                    FaceAuthUiEvent.FACE_AUTH_UPDATED_PRIMARY_BOUNCER_SHOWN,
+                    fallbackToDetect = true
+                )
+            }
+            .launchIn(applicationScope)
+
+        alternateBouncerInteractor.isVisible
+            .whenItFlipsToTrue()
+            .onEach {
+                faceAuthenticationLogger.alternateBouncerVisibilityChanged()
+                runFaceAuth(
+                    FaceAuthUiEvent.FACE_AUTH_TRIGGERED_ALTERNATE_BIOMETRIC_BOUNCER_SHOWN,
+                    fallbackToDetect = false
+                )
+            }
+            .launchIn(applicationScope)
+
+        merge(
+                keyguardTransitionInteractor.aodToLockscreenTransition,
+                keyguardTransitionInteractor.offToLockscreenTransition,
+                keyguardTransitionInteractor.dozingToLockscreenTransition
+            )
+            .filter { it.transitionState == TransitionState.STARTED }
+            .onEach {
+                faceAuthenticationLogger.lockscreenBecameVisible(it)
+                runFaceAuth(
+                    FaceAuthUiEvent.FACE_AUTH_UPDATED_KEYGUARD_VISIBILITY_CHANGED,
+                    fallbackToDetect = true
+                )
+            }
+            .launchIn(applicationScope)
+    }
+
+    override fun onSwipeUpOnBouncer() {
+        runFaceAuth(FaceAuthUiEvent.FACE_AUTH_TRIGGERED_SWIPE_UP_ON_BOUNCER, false)
+    }
+
+    override fun onNotificationPanelClicked() {
+        runFaceAuth(FaceAuthUiEvent.FACE_AUTH_TRIGGERED_NOTIFICATION_PANEL_CLICKED, true)
+    }
+
+    override fun onQsExpansionStared() {
+        runFaceAuth(FaceAuthUiEvent.FACE_AUTH_TRIGGERED_QS_EXPANDED, true)
+    }
+
+    override fun onDeviceLifted() {
+        runFaceAuth(FaceAuthUiEvent.FACE_AUTH_TRIGGERED_PICK_UP_GESTURE_TRIGGERED, true)
+    }
+
+    override fun onAssistantTriggeredOnLockScreen() {
+        runFaceAuth(FaceAuthUiEvent.FACE_AUTH_UPDATED_ASSISTANT_VISIBILITY_CHANGED, true)
+    }
+
+    override fun onUdfpsSensorTouched() {
+        runFaceAuth(FaceAuthUiEvent.FACE_AUTH_TRIGGERED_UDFPS_POINTER_DOWN, false)
+    }
+
+    override fun registerListener(listener: FaceAuthenticationListener) {
+        listeners.add(listener)
+    }
+
+    override fun unregisterListener(listener: FaceAuthenticationListener) {
+        listeners.remove(listener)
+    }
+
+    override fun isLockedOut(): Boolean = repository.isLockedOut.value
+
+    override fun isRunning(): Boolean = repository.isAuthRunning.value
+
+    override fun canFaceAuthRun(): Boolean = repository.canRunFaceAuth.value
+
+    override fun isEnabled(): Boolean {
+        return featureFlags.isEnabled(Flags.FACE_AUTH_REFACTOR)
+    }
+
+    override fun onPrimaryBouncerUserInput() {
+        repository.cancel()
+    }
+
+    /** Provide the status of face authentication */
+    override val authenticationStatus = repository.authenticationStatus
+
+    /** Provide the status of face detection */
+    override val detectionStatus = repository.detectionStatus
+
+    private fun runFaceAuth(uiEvent: FaceAuthUiEvent, fallbackToDetect: Boolean) {
+        if (featureFlags.isEnabled(Flags.FACE_AUTH_REFACTOR)) {
+            applicationScope.launch {
+                faceAuthenticationLogger.authRequested(uiEvent)
+                repository.authenticate(uiEvent, fallbackToDetection = fallbackToDetect)
+            }
+        } else {
+            faceAuthenticationLogger.ignoredFaceAuthTrigger(
+                uiEvent,
+                ignoredReason = "Skipping face auth request because feature flag is false"
+            )
+        }
+    }
+
+    private fun observeFaceAuthStateUpdates() {
+        authenticationStatus
+            .onEach { authStatusUpdate ->
+                listeners.forEach { it.onAuthenticationStatusChanged(authStatusUpdate) }
+            }
+            .flowOn(mainDispatcher)
+            .launchIn(applicationScope)
+        detectionStatus
+            .onEach { detectionStatusUpdate ->
+                listeners.forEach { it.onDetectionStatusChanged(detectionStatusUpdate) }
+            }
+            .flowOn(mainDispatcher)
+            .launchIn(applicationScope)
+    }
+
+    companion object {
+        const val TAG = "KeyguardFaceAuthInteractor"
+    }
+}
+
+// Extension method that filters a generic Boolean flow to one that emits
+// whenever there is flip from false -> true
+private fun Flow<Boolean>.whenItFlipsToTrue(): Flow<Boolean> {
+    return this.pairwise()
+        .filter { pair -> !pair.previousValue && pair.newValue }
+        .map { it.newValue }
+}
diff --git a/core/java/com/android/internal/expresslog/Utils.java b/packages/SystemUI/src/com/android/systemui/keyguard/shared/constants/TrustAgentUiEvent.kt
similarity index 62%
copy from core/java/com/android/internal/expresslog/Utils.java
copy to packages/SystemUI/src/com/android/systemui/keyguard/shared/constants/TrustAgentUiEvent.kt
index d82192f..ef6079f 100644
--- a/core/java/com/android/internal/expresslog/Utils.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/constants/TrustAgentUiEvent.kt
@@ -14,8 +14,12 @@
  * limitations under the License.
  */
 
-package com.android.internal.expresslog;
+package com.android.systemui.keyguard.shared.constants
 
-final class Utils {
-    static native long hashString(String stringToHash);
+import com.android.internal.logging.UiEvent
+import com.android.internal.logging.UiEventLogger
+
+enum class TrustAgentUiEvent(private val metricId: Int) : UiEventLogger.UiEventEnum {
+    @UiEvent(doc = "TrustAgent newly unlocked the device") TRUST_AGENT_NEWLY_UNLOCKED(1361);
+    override fun getId() = metricId
 }
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 f7355d5..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,8 @@
 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
 import com.android.systemui.plugins.log.LogLevel.DEBUG
@@ -27,15 +29,15 @@
 constructor(
     @FaceAuthLog private val logBuffer: LogBuffer,
 ) {
-    fun ignoredFaceAuthTrigger(uiEvent: FaceAuthUiEvent) {
+    fun ignoredFaceAuthTrigger(uiEvent: FaceAuthUiEvent, ignoredReason: String) {
         logBuffer.log(
             TAG,
             DEBUG,
-            { str1 = uiEvent.reason },
             {
-                "Ignoring trigger because face auth is currently running. " +
-                    "Trigger reason: $str1"
-            }
+                str1 = uiEvent.reason
+                str2 = ignoredReason
+            },
+            { "Ignoring trigger because $str2, Trigger reason: $str1" }
         )
     }
 
@@ -135,15 +137,6 @@
         logBuffer.log(TAG, DEBUG, "Face authentication failed")
     }
 
-    fun authenticationAcquired(acquireInfo: Int) {
-        logBuffer.log(
-            TAG,
-            DEBUG,
-            { int1 = acquireInfo },
-            { "Face acquired during face authentication: acquireInfo: $int1 " }
-        )
-    }
-
     fun authenticationError(
         errorCode: Int,
         errString: CharSequence?,
@@ -217,4 +210,55 @@
     fun cancellingFaceAuth() {
         logBuffer.log(TAG, DEBUG, "cancelling face auth because a gating condition became false")
     }
+
+    fun interactorStarted() {
+        logBuffer.log(TAG, DEBUG, "KeyguardFaceAuthInteractor started")
+    }
+
+    fun bouncerVisibilityChanged() {
+        logBuffer.log(TAG, DEBUG, "Triggering face auth because primary bouncer is visible")
+    }
+
+    fun alternateBouncerVisibilityChanged() {
+        logBuffer.log(TAG, DEBUG, "Triggering face auth because alternate bouncer is visible")
+    }
+
+    fun lockscreenBecameVisible(transitionStep: TransitionStep?) {
+        logBuffer.log(
+            TAG,
+            DEBUG,
+            { str1 = "$transitionStep" },
+            { "Triggering face auth because lockscreen became visible due to transition: $str1" }
+        )
+    }
+
+    fun authRequested(uiEvent: FaceAuthUiEvent) {
+        logBuffer.log(
+            TAG,
+            DEBUG,
+            { str1 = "$uiEvent" },
+            { "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 4cc0410..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,14 +43,17 @@
 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
 import android.support.v4.media.MediaMetadataCompat
 import android.text.TextUtils
 import android.util.Log
+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
@@ -136,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()
 }
@@ -180,6 +185,7 @@
     private val logger: MediaUiEventLogger,
     private val smartspaceManager: SmartspaceManager,
     private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
+    private val statusBarService: IStatusBarService,
 ) : Dumpable, BcSmartspaceDataPlugin.SmartspaceTargetListener {
 
     companion object {
@@ -217,6 +223,13 @@
     private var smartspaceSession: SmartspaceSession? = null
     private var allowMediaRecommendations = allowMediaRecommendations(context)
 
+    private val artworkWidth =
+        context.resources.getDimensionPixelSize(
+            com.android.internal.R.dimen.config_mediaMetadataBitmapMaxSize
+        )
+    private val artworkHeight =
+        context.resources.getDimensionPixelSize(R.dimen.qs_media_session_height_expanded)
+
     /** Check whether this notification is an RCN */
     private fun isRemoteCastNotification(sbn: StatusBarNotification): Boolean {
         return sbn.notification.extras.containsKey(Notification.EXTRA_MEDIA_REMOTE_DEVICE)
@@ -244,6 +257,7 @@
         mediaFlags: MediaFlags,
         logger: MediaUiEventLogger,
         smartspaceManager: SmartspaceManager,
+        statusBarService: IStatusBarService,
         keyguardUpdateMonitor: KeyguardUpdateMonitor,
     ) : this(
         context,
@@ -269,6 +283,7 @@
         logger,
         smartspaceManager,
         keyguardUpdateMonitor,
+        statusBarService,
     )
 
     private val appChangeReceiver =
@@ -370,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)
         }
@@ -467,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 */
@@ -593,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)
     }
@@ -743,7 +760,7 @@
         key: String,
         sbn: StatusBarNotification,
         oldKey: String?,
-        logEvent: Boolean = false
+        isNewlyActiveEntry: Boolean = false,
     ) {
         val token =
             sbn.notification.extras.getParcelable(
@@ -757,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,
@@ -785,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()) {
@@ -865,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) {
@@ -1250,9 +1286,21 @@
             return null
         }
 
-        val source = ImageDecoder.createSource(context.getContentResolver(), uri)
+        val source = ImageDecoder.createSource(context.contentResolver, uri)
         return try {
-            ImageDecoder.decodeBitmap(source) { decoder, _, _ ->
+            ImageDecoder.decodeBitmap(source) { decoder, info, _ ->
+                val width = info.size.width
+                val height = info.size.height
+                val scale =
+                    MediaDataUtils.getScaleFactor(
+                        APair(width, height),
+                        APair(artworkWidth, artworkHeight)
+                    )
+
+                // Downscale if needed
+                if (scale != 0f && scale < 1) {
+                    decoder.setTargetSize((scale * width).toInt(), (scale * height).toInt())
+                }
                 decoder.allocator = ImageDecoder.ALLOCATOR_SOFTWARE
             }
         } catch (e: IOException) {
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaTimeoutListener.kt b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaTimeoutListener.kt
index a1d9214..ed4eef9 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaTimeoutListener.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaTimeoutListener.kt
@@ -17,6 +17,7 @@
 package com.android.systemui.media.controls.pipeline
 
 import android.media.session.MediaController
+import android.media.session.MediaSession
 import android.media.session.PlaybackState
 import android.os.SystemProperties
 import com.android.internal.annotations.VisibleForTesting
@@ -148,7 +149,7 @@
         reusedListener?.let {
             val wasPlaying = it.isPlaying()
             logger.logUpdateListener(key, wasPlaying)
-            it.mediaData = data
+            it.setMediaData(data)
             it.key = key
             mediaListeners[key] = it
             if (wasPlaying != it.isPlaying()) {
@@ -208,24 +209,7 @@
         var resumption: Boolean? = null
         var destroyed = false
         var expiration = Long.MAX_VALUE
-
-        var mediaData: MediaData = data
-            set(value) {
-                destroyed = false
-                mediaController?.unregisterCallback(this)
-                field = value
-                val token = field.token
-                mediaController =
-                    if (token != null) {
-                        mediaControllerFactory.create(token)
-                    } else {
-                        null
-                    }
-                mediaController?.registerCallback(this)
-                // Let's register the cancellations, but not dispatch events now.
-                // Timeouts didn't happen yet and reentrant events are troublesome.
-                processState(mediaController?.playbackState, dispatchEvents = false)
-            }
+        var sessionToken: MediaSession.Token? = null
 
         // Resume controls may have null token
         private var mediaController: MediaController? = null
@@ -236,7 +220,7 @@
         fun isPlaying() = lastState?.state?.isPlaying() ?: false
 
         init {
-            mediaData = data
+            setMediaData(data)
         }
 
         fun destroy() {
@@ -245,8 +229,28 @@
             destroyed = true
         }
 
+        fun setMediaData(data: MediaData) {
+            sessionToken = data.token
+            destroyed = false
+            mediaController?.unregisterCallback(this)
+            mediaController =
+                if (data.token != null) {
+                    mediaControllerFactory.create(data.token)
+                } else {
+                    null
+                }
+            mediaController?.registerCallback(this)
+            // Let's register the cancellations, but not dispatch events now.
+            // Timeouts didn't happen yet and reentrant events are troublesome.
+            processState(
+                mediaController?.playbackState,
+                dispatchEvents = false,
+                currentResumption = data.resumption,
+            )
+        }
+
         override fun onPlaybackStateChanged(state: PlaybackState?) {
-            processState(state, dispatchEvents = true)
+            processState(state, dispatchEvents = true, currentResumption = resumption)
         }
 
         override fun onSessionDestroyed() {
@@ -263,14 +267,18 @@
             }
         }
 
-        private fun processState(state: PlaybackState?, dispatchEvents: Boolean) {
+        private fun processState(
+            state: PlaybackState?,
+            dispatchEvents: Boolean,
+            currentResumption: Boolean?,
+        ) {
             logger.logPlaybackState(key, state)
 
             val playingStateSame = (state?.state?.isPlaying() == isPlaying())
             val actionsSame =
                 (lastState?.actions == state?.actions) &&
                     areCustomActionListsEqual(lastState?.customActions, state?.customActions)
-            val resumptionChanged = resumption != mediaData.resumption
+            val resumptionChanged = resumption != currentResumption
 
             lastState = state
 
@@ -282,7 +290,7 @@
             if (playingStateSame && !resumptionChanged) {
                 return
             }
-            resumption = mediaData.resumption
+            resumption = currentResumption
 
             val playing = isPlaying()
             if (!playing) {
@@ -294,7 +302,7 @@
                 }
                 expireMediaTimeout(key, "PLAYBACK STATE CHANGED - $state, $resumption")
                 val timeout =
-                    if (mediaData.resumption) {
+                    if (currentResumption == true) {
                         RESUME_MEDIA_TIMEOUT
                     } else {
                         PAUSED_MEDIA_TIMEOUT
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java
index cb1f12cf..40027a1 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java
@@ -56,6 +56,7 @@
 import android.os.Trace;
 import android.text.TextUtils;
 import android.util.Log;
+import android.util.Pair;
 import android.util.TypedValue;
 import android.view.Gravity;
 import android.view.View;
@@ -122,6 +123,11 @@
 import com.android.systemui.util.concurrency.DelayableExecutor;
 import com.android.systemui.util.time.SystemClock;
 
+import dagger.Lazy;
+
+import kotlin.Triple;
+import kotlin.Unit;
+
 import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
@@ -129,10 +135,6 @@
 
 import javax.inject.Inject;
 
-import dagger.Lazy;
-import kotlin.Triple;
-import kotlin.Unit;
-
 /**
  * A view controller used for Media Playback.
  */
@@ -1000,18 +1002,9 @@
 
         int width = drawable.getIntrinsicWidth();
         int height = drawable.getIntrinsicHeight();
-        if (width == 0 || height == 0 || targetWidth == 0 || targetHeight == 0) {
-            return;
-        }
-
-        float scale;
-        if ((width / (float) height) > (targetWidth / (float) targetHeight)) {
-            // Drawable is wider than target view, scale to match height
-            scale = targetHeight / (float) height;
-        } else {
-            // Drawable is taller than target view, scale to match width
-            scale = targetWidth / (float) width;
-        }
+        float scale = MediaDataUtils.getScaleFactor(new Pair(width, height),
+                new Pair(targetWidth, targetHeight));
+        if (scale == 0) return;
         transitionDrawable.setLayerSize(layer, (int) (scale * width), (int) (scale * height));
     }
 
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/controls/util/MediaDataUtils.java b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaDataUtils.java
index e95106e..0239d36 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaDataUtils.java
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaDataUtils.java
@@ -22,6 +22,7 @@
 import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.text.TextUtils;
+import android.util.Pair;
 
 import androidx.core.math.MathUtils;
 import androidx.media.utils.MediaConstants;
@@ -87,4 +88,32 @@
         }
         return null;
     }
+
+    /**
+     * Calculate a scale factor that will allow the input to fill the target size.
+     *
+     * @param input width, height of the input view
+     * @param target width, height of the target view
+     * @return the scale factor; 0 if any given dimension is 0
+     */
+    public static float getScaleFactor(Pair<Integer, Integer> input,
+            Pair<Integer, Integer> target) {
+        float width = (float) input.first;
+        float height = (float) input.second;
+
+        float targetWidth = (float) target.first;
+        float targetHeight = (float) target.second;
+
+        if (width == 0 || height == 0 || targetWidth == 0 || targetHeight == 0) {
+            return 0f;
+        }
+
+        if ((width / height) > (targetWidth / targetHeight)) {
+            // Input is wider than target view, scale to match height
+            return targetHeight / height;
+        } else {
+            // Input is taller than target view, scale to match width
+            return targetWidth / width;
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
index 9606bcf..08e47a0 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
@@ -273,8 +273,7 @@
     }
 
     @Override
-    public void onStart() {
-        super.onStart();
+    public void start() {
         mMediaOutputController.start(this);
         if (isBroadcastSupported() && !mIsLeBroadcastCallbackRegistered) {
             mMediaOutputController.registerLeBroadcastServiceCallback(mExecutor,
@@ -284,8 +283,7 @@
     }
 
     @Override
-    public void onStop() {
-        super.onStop();
+    public void stop() {
         if (isBroadcastSupported() && mIsLeBroadcastCallbackRegistered) {
             mMediaOutputController.unregisterLeBroadcastServiceCallback(mBroadcastCallback);
             mIsLeBroadcastCallbackRegistered = false;
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java
index f0ff140..abf0932 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java
@@ -212,8 +212,8 @@
     }
 
     @Override
-    public void onStart() {
-        super.onStart();
+    public void start() {
+        super.start();
         if (!mIsLeBroadcastAssistantCallbackRegistered) {
             mIsLeBroadcastAssistantCallbackRegistered = true;
             mMediaOutputController.registerLeBroadcastAssistantServiceCallback(mExecutor,
@@ -223,8 +223,8 @@
     }
 
     @Override
-    public void onStop() {
-        super.onStop();
+    public void stop() {
+        super.stop();
         if (mIsLeBroadcastAssistantCallbackRegistered) {
             mIsLeBroadcastAssistantCallbackRegistered = false;
             mMediaOutputController.unregisterLeBroadcastAssistantServiceCallback(
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/media/taptotransfer/common/MediaTttUtils.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttUtils.kt
index dbc2a5e..b29b588 100644
--- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttUtils.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttUtils.kt
@@ -19,7 +19,7 @@
 import android.content.Context
 import android.content.pm.PackageManager
 import android.graphics.drawable.Drawable
-import androidx.annotation.ColorRes
+import androidx.annotation.AttrRes
 import androidx.annotation.DrawableRes
 import com.android.systemui.R
 import com.android.systemui.common.shared.model.ContentDescription
@@ -108,7 +108,7 @@
 data class IconInfo(
     val contentDescription: ContentDescription,
     val icon: MediaTttIcon,
-    @ColorRes val tint: Int?,
+    @AttrRes val tint: Int?,
     /**
      * True if [drawable] is the app's icon, and false if [drawable] is some generic default icon.
      */
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/navigationbar/gestural/BackPanelController.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt
index 3770b28..96e9756 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt
@@ -60,6 +60,7 @@
 private const val MIN_DURATION_COMMITTED_ANIMATION = 80L
 private const val MIN_DURATION_COMMITTED_AFTER_FLING_ANIMATION = 120L
 private const val MIN_DURATION_INACTIVE_BEFORE_FLUNG_ANIMATION = 50L
+private const val MIN_DURATION_INACTIVE_BEFORE_ACTIVE_ANIMATION = 80L
 private const val MIN_DURATION_FLING_ANIMATION = 160L
 
 private const val MIN_DURATION_ENTRY_TO_ACTIVE_CONSIDERED_AS_FLING = 100L
@@ -135,7 +136,8 @@
     private lateinit var backCallback: NavigationEdgeBackPlugin.BackCallback
     private var previousXTranslationOnActiveOffset = 0f
     private var previousXTranslation = 0f
-    private var totalTouchDelta = 0f
+    private var totalTouchDeltaActive = 0f
+    private var totalTouchDeltaInactive = 0f
     private var touchDeltaStartX = 0f
     private var velocityTracker: VelocityTracker? = null
         set(value) {
@@ -154,7 +156,7 @@
 
     private var gestureEntryTime = 0L
     private var gestureInactiveTime = 0L
-    private var gestureActiveTime = 0L
+    private var gesturePastActiveThresholdWhileInactiveTime = 0L
 
     private val elapsedTimeSinceInactive
         get() = SystemClock.uptimeMillis() - gestureInactiveTime
@@ -250,7 +252,7 @@
     private fun updateConfiguration() {
         params.update(resources)
         mView.updateArrowPaint(params.arrowThickness)
-        minFlingDistance = ViewConfiguration.get(context).scaledTouchSlop * 3
+        minFlingDistance = viewConfiguration.scaledTouchSlop * 3
     }
 
     private val configurationListener = object : ConfigurationController.ConfigurationListener {
@@ -403,30 +405,46 @@
             }
             GestureState.ACTIVE -> {
                 val isPastDynamicDeactivationThreshold =
-                        totalTouchDelta <= params.deactivationSwipeTriggerThreshold
+                    totalTouchDeltaActive <= params.deactivationTriggerThreshold
                 val isMinDurationElapsed =
-                        elapsedTimeSinceEntry > MIN_DURATION_ACTIVE_BEFORE_INACTIVE_ANIMATION
+                    elapsedTimeSinceEntry > MIN_DURATION_ACTIVE_BEFORE_INACTIVE_ANIMATION
 
                 if (isMinDurationElapsed && (!isWithinYActivationThreshold ||
-                                isPastDynamicDeactivationThreshold)
+                            isPastDynamicDeactivationThreshold)
                 ) {
                     updateArrowState(GestureState.INACTIVE)
                 }
             }
             GestureState.INACTIVE -> {
                 val isPastStaticThreshold =
-                        xTranslation > params.staticTriggerThreshold
-                val isPastDynamicReactivationThreshold = totalTouchDelta > 0 &&
-                        abs(totalTouchDelta) >=
-                        params.reactivationTriggerThreshold
-
-                if (isPastStaticThreshold &&
+                    xTranslation > params.staticTriggerThreshold
+                val isPastDynamicReactivationThreshold =
+                    totalTouchDeltaInactive >= params.reactivationTriggerThreshold
+                val isPastAllThresholds = isPastStaticThreshold &&
                         isPastDynamicReactivationThreshold &&
                         isWithinYActivationThreshold
-                ) {
+                val isPastAllThresholdsForFirstTime = isPastAllThresholds &&
+                        gesturePastActiveThresholdWhileInactiveTime == 0L
+
+                gesturePastActiveThresholdWhileInactiveTime = when {
+                    isPastAllThresholdsForFirstTime -> SystemClock.uptimeMillis()
+                    isPastAllThresholds -> gesturePastActiveThresholdWhileInactiveTime
+                    else -> 0L
+                }
+
+                val elapsedTimePastAllThresholds =
+                    SystemClock.uptimeMillis() - gesturePastActiveThresholdWhileInactiveTime
+
+                val isPastMinimumInactiveToActiveDuration =
+                    elapsedTimePastAllThresholds > MIN_DURATION_INACTIVE_BEFORE_ACTIVE_ANIMATION
+
+                if (isPastAllThresholds && isPastMinimumInactiveToActiveDuration) {
+                    // The minimum duration adds the 'edge stickiness'
+                    // factor before pulling it off edge
                     updateArrowState(GestureState.ACTIVE)
                 }
             }
+
             else -> {}
         }
     }
@@ -451,19 +469,25 @@
         previousXTranslation = xTranslation
 
         if (abs(xDelta) > 0) {
-            val range =
-                params.run { deactivationSwipeTriggerThreshold..reactivationTriggerThreshold }
-            val isTouchInContinuousDirection =
-                    sign(xDelta) == sign(totalTouchDelta) || totalTouchDelta in range
+            val isInSameDirection = sign(xDelta) == sign(totalTouchDeltaActive)
+            val isInDynamicRange = totalTouchDeltaActive in params.dynamicTriggerThresholdRange
+            val isTouchInContinuousDirection = isInSameDirection || isInDynamicRange
 
             if (isTouchInContinuousDirection) {
                 // Direction has NOT changed, so keep counting the delta
-                totalTouchDelta += xDelta
+                totalTouchDeltaActive += xDelta
             } else {
                 // Direction has changed, so reset the delta
-                totalTouchDelta = xDelta
+                totalTouchDeltaActive = xDelta
                 touchDeltaStartX = x
             }
+
+            // Add a slop to to prevent small jitters when arrow is at edge in
+            // emitting small values that cause the arrow to poke out slightly
+            val minimumDelta = -viewConfiguration.scaledTouchSlop.toFloat()
+            totalTouchDeltaInactive = totalTouchDeltaInactive
+                .plus(xDelta)
+                .coerceAtLeast(minimumDelta)
         }
 
         updateArrowStateOnMove(yTranslation, xTranslation)
@@ -471,7 +495,7 @@
         val gestureProgress = when (currentState) {
             GestureState.ACTIVE -> fullScreenProgress(xTranslation)
             GestureState.ENTRY -> staticThresholdProgress(xTranslation)
-            GestureState.INACTIVE -> reactivationThresholdProgress(totalTouchDelta)
+            GestureState.INACTIVE -> reactivationThresholdProgress(totalTouchDeltaInactive)
             else -> null
         }
 
@@ -529,8 +553,7 @@
      * the arrow is fully stretched (between 0.0 - 1.0f)
      */
     private fun fullScreenProgress(xTranslation: Float): Float {
-        val progress = abs((xTranslation - previousXTranslationOnActiveOffset) /
-                (fullyStretchedThreshold - previousXTranslationOnActiveOffset))
+        val progress = (xTranslation - previousXTranslationOnActiveOffset) / fullyStretchedThreshold
         return MathUtils.saturate(progress)
     }
 
@@ -581,13 +604,15 @@
     }
 
     private var previousPreThresholdWidthInterpolator = params.entryWidthTowardsEdgeInterpolator
-    fun preThresholdWidthStretchAmount(progress: Float): Float {
+    private fun preThresholdWidthStretchAmount(progress: Float): Float {
         val interpolator = run {
-            val isPastSlop = abs(totalTouchDelta) > ViewConfiguration.get(context).scaledTouchSlop
+            val isPastSlop = totalTouchDeltaInactive > viewConfiguration.scaledTouchSlop
             if (isPastSlop) {
-                if (totalTouchDelta > 0) {
+                if (totalTouchDeltaInactive > 0) {
                     params.entryWidthInterpolator
-                } else params.entryWidthTowardsEdgeInterpolator
+                } else {
+                    params.entryWidthTowardsEdgeInterpolator
+                }
             } else {
                 previousPreThresholdWidthInterpolator
             }.also { previousPreThresholdWidthInterpolator = it }
@@ -643,7 +668,7 @@
             xVelocity.takeIf { mView.isLeftPanel } ?: (xVelocity * -1)
         } ?: 0f
         val isPastFlingVelocityThreshold =
-                flingVelocity > ViewConfiguration.get(context).scaledMinimumFlingVelocity
+                flingVelocity > viewConfiguration.scaledMinimumFlingVelocity
         return flingDistance > minFlingDistance && isPastFlingVelocityThreshold
     }
 
@@ -861,7 +886,6 @@
             }
             GestureState.ACTIVE -> {
                 previousXTranslationOnActiveOffset = previousXTranslation
-                gestureActiveTime = SystemClock.uptimeMillis()
 
                 updateRestingArrowDimens()
 
@@ -870,21 +894,24 @@
                     vibratorHelper.vibrate(VIBRATE_ACTIVATED_EFFECT)
                 }
 
-                val startingVelocity = convertVelocityToSpringStartingVelocity(
-                    valueOnFastVelocity = 0f,
-                    valueOnSlowVelocity = if (previousState == GestureState.ENTRY) 2f else 4.5f
-                )
+                val minimumPop = 2f
+                val maximumPop = 4.5f
 
                 when (previousState) {
-                    GestureState.ENTRY,
-                    GestureState.INACTIVE -> {
+                    GestureState.ENTRY -> {
+                        val startingVelocity = convertVelocityToSpringStartingVelocity(
+                            valueOnFastVelocity = minimumPop,
+                            valueOnSlowVelocity = maximumPop,
+                            fastVelocityBound = 1f,
+                            slowVelocityBound = 0.5f,
+                        )
                         mView.popOffEdge(startingVelocity)
                     }
-                    GestureState.COMMITTED -> {
-                        // if previous state was committed then this activation
-                        // was due to a quick second swipe. Don't pop the arrow this time
+                    GestureState.INACTIVE -> {
+                        mView.popOffEdge(maximumPop)
                     }
-                    else -> { }
+
+                    else -> {}
                 }
             }
 
@@ -896,7 +923,7 @@
                 // but because we can also independently enter this state
                 // if touch Y >> touch X, we force it to deactivationSwipeTriggerThreshold
                 // so that gesture progress in this state is consistent regardless of entry
-                totalTouchDelta = params.deactivationSwipeTriggerThreshold
+                totalTouchDeltaInactive = params.deactivationTriggerThreshold
 
                 val startingVelocity = convertVelocityToSpringStartingVelocity(
                         valueOnFastVelocity = -1.05f,
@@ -944,10 +971,12 @@
     private fun convertVelocityToSpringStartingVelocity(
             valueOnFastVelocity: Float,
             valueOnSlowVelocity: Float,
+            fastVelocityBound: Float = 3f,
+            slowVelocityBound: Float = 0f,
     ): Float {
         val factor = velocityTracker?.run {
             computeCurrentVelocity(PX_PER_MS)
-            MathUtils.smoothStep(0f, 3f, abs(xVelocity))
+            MathUtils.smoothStep(slowVelocityBound, fastVelocityBound, abs(xVelocity))
         } ?: valueOnFastVelocity
 
         return MathUtils.lerp(valueOnFastVelocity, valueOnSlowVelocity, 1 - factor)
@@ -982,7 +1011,7 @@
                     "$currentState",
                     "startX=$startX",
                     "startY=$startY",
-                    "xDelta=${"%.1f".format(totalTouchDelta)}",
+                    "xDelta=${"%.1f".format(totalTouchDeltaActive)}",
                     "xTranslation=${"%.1f".format(previousXTranslation)}",
                     "pre=${"%.0f".format(staticThresholdProgress(previousXTranslation) * 100)}%",
                     "post=${"%.0f".format(fullScreenProgress(previousXTranslation) * 100)}%"
@@ -1023,7 +1052,7 @@
             }
 
             drawVerticalLine(x = params.staticTriggerThreshold, color = Color.BLUE)
-            drawVerticalLine(x = params.deactivationSwipeTriggerThreshold, color = Color.BLUE)
+            drawVerticalLine(x = params.deactivationTriggerThreshold, color = Color.BLUE)
             drawVerticalLine(x = startX, color = Color.GREEN)
             drawVerticalLine(x = previousXTranslation, color = Color.DKGRAY)
         }
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
index 26b0e8d..41e3e6d 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
@@ -55,6 +55,7 @@
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.Surface;
+import android.view.VelocityTracker;
 import android.view.ViewConfiguration;
 import android.view.WindowInsets;
 import android.view.WindowManager;
@@ -88,6 +89,7 @@
 import com.android.systemui.tracing.nano.SystemUiTraceProto;
 import com.android.systemui.util.Assert;
 import com.android.wm.shell.back.BackAnimation;
+import com.android.wm.shell.desktopmode.DesktopMode;
 import com.android.wm.shell.pip.Pip;
 
 import java.io.PrintWriter;
@@ -173,7 +175,7 @@
                 }
             };
 
-
+    private final VelocityTracker mVelocityTracker = VelocityTracker.obtain();
     private final Context mContext;
     private final UserTracker mUserTracker;
     private final OverviewProxyService mOverviewProxyService;
@@ -189,6 +191,7 @@
     private final WindowManager mWindowManager;
     private final IWindowManager mWindowManagerService;
     private final Optional<Pip> mPipOptional;
+    private final Optional<DesktopMode> mDesktopModeOptional;
     private final FalsingManager mFalsingManager;
     private final Configuration mLastReportedConfig = new Configuration();
     // Activities which should not trigger Back gesture.
@@ -203,6 +206,7 @@
     private final Rect mPipExcludedBounds = new Rect();
     private final Rect mNavBarOverlayExcludedBounds = new Rect();
     private final Region mExcludeRegion = new Region();
+    private final Region mDesktopModeExcludeRegion = new Region();
     private final Region mUnrestrictedExcludeRegion = new Region();
     private final Provider<NavigationBarEdgePanel> mNavBarEdgePanelProvider;
     private final Provider<BackGestureTfClassifierProvider>
@@ -327,6 +331,9 @@
     private final Consumer<Boolean> mOnIsInPipStateChangedListener =
             (isInPip) -> mIsInPip = isInPip;
 
+    private final Consumer<Region> mDesktopCornersChangedListener =
+            (desktopExcludeRegion) -> mDesktopModeExcludeRegion.set(desktopExcludeRegion);
+
     private final UserTracker.Callback mUserChangedCallback =
             new UserTracker.Callback() {
                 @Override
@@ -351,6 +358,7 @@
             WindowManager windowManager,
             IWindowManager windowManagerService,
             Optional<Pip> pipOptional,
+            Optional<DesktopMode> desktopModeOptional,
             FalsingManager falsingManager,
             Provider<NavigationBarEdgePanel> navigationBarEdgePanelProvider,
             Provider<BackGestureTfClassifierProvider> backGestureTfClassifierProviderProvider,
@@ -371,6 +379,7 @@
         mWindowManager = windowManager;
         mWindowManagerService = windowManagerService;
         mPipOptional = pipOptional;
+        mDesktopModeOptional = desktopModeOptional;
         mFalsingManager = falsingManager;
         mNavBarEdgePanelProvider = navigationBarEdgePanelProvider;
         mBackGestureTfClassifierProviderProvider = backGestureTfClassifierProviderProvider;
@@ -579,6 +588,9 @@
                     mMainExecutor::execute, mOnPropertiesChangedListener);
             mPipOptional.ifPresent(
                     pip -> pip.setOnIsInPipStateChangedListener(mOnIsInPipStateChangedListener));
+            mDesktopModeOptional.ifPresent(
+                    dm -> dm.addDesktopGestureExclusionRegionListener(
+                            mDesktopCornersChangedListener, mMainExecutor));
 
             try {
                 mWindowManagerService.registerSystemGestureExclusionListener(
@@ -801,11 +813,17 @@
                 mDisplaySize.y - insets.bottom);
     }
 
+    private boolean desktopExcludeRegionContains(int x, int y) {
+        return mDesktopModeExcludeRegion.contains(x, y);
+    }
+
     private boolean isWithinTouchRegion(int x, int y) {
         // If the point is inside the PiP or Nav bar overlay excluded bounds, then ignore the back
         // gesture
         final boolean isInsidePip = mIsInPip && mPipExcludedBounds.contains(x, y);
-        if (isInsidePip || mNavBarOverlayExcludedBounds.contains(x, y)) {
+        final boolean isInDesktopExcludeRegion = desktopExcludeRegionContains(x, y);
+        if (isInsidePip || isInDesktopExcludeRegion
+                || mNavBarOverlayExcludedBounds.contains(x, y)) {
             return false;
         }
 
@@ -901,6 +919,10 @@
                 Log.d(DEBUG_MISSING_GESTURE_TAG, "Start gesture: " + ev);
             }
 
+            // ACTION_UP or ACTION_CANCEL is not guaranteed to be called before a new
+            // ACTION_DOWN, in that case we should just reuse the old instance.
+            mVelocityTracker.clear();
+
             // Verify if this is in within the touch region and we aren't in immersive mode, and
             // either the bouncer is showing or the notification panel is hidden
             mInputEventReceiver.setBatchingEnabled(false);
@@ -1027,11 +1049,30 @@
 
     private void dispatchToBackAnimation(MotionEvent event) {
         if (mBackAnimation != null) {
+            mVelocityTracker.addMovement(event);
+
+            final float velocityX;
+            final float velocityY;
+            if (event.getAction() == MotionEvent.ACTION_UP) {
+                // Compute the current velocity is expensive (see computeCurrentVelocity), so we
+                // are only doing it when the user completes the gesture.
+                int unitPixelPerSecond = 1000;
+                int maxVelocity = mViewConfiguration.getScaledMaximumFlingVelocity();
+                mVelocityTracker.computeCurrentVelocity(unitPixelPerSecond, maxVelocity);
+                velocityX = mVelocityTracker.getXVelocity();
+                velocityY = mVelocityTracker.getYVelocity();
+            } else {
+                velocityX = Float.NaN;
+                velocityY = Float.NaN;
+            }
+
             mBackAnimation.onBackMotion(
-                    event.getX(),
-                    event.getY(),
-                    event.getActionMasked(),
-                    mIsOnLeftEdge ? BackEvent.EDGE_LEFT : BackEvent.EDGE_RIGHT);
+                    /* touchX = */ event.getX(),
+                    /* touchY = */ event.getY(),
+                    /* velocityX = */ velocityX,
+                    /* velocityY = */ velocityY,
+                    /* keyAction = */ event.getActionMasked(),
+                    /* swipeEdge = */ mIsOnLeftEdge ? BackEvent.EDGE_LEFT : BackEvent.EDGE_RIGHT);
         }
     }
 
@@ -1112,6 +1153,7 @@
         pw.println("  mUnrestrictedExcludeRegion=" + mUnrestrictedExcludeRegion);
         pw.println("  mIsInPip=" + mIsInPip);
         pw.println("  mPipExcludedBounds=" + mPipExcludedBounds);
+        pw.println("  mDesktopModeExclusionRegion=" + mDesktopModeExcludeRegion);
         pw.println("  mNavBarOverlayExcludedBounds=" + mNavBarOverlayExcludedBounds);
         pw.println("  mEdgeWidthLeft=" + mEdgeWidthLeft);
         pw.println("  mEdgeWidthRight=" + mEdgeWidthRight);
@@ -1182,6 +1224,7 @@
         private final WindowManager mWindowManager;
         private final IWindowManager mWindowManagerService;
         private final Optional<Pip> mPipOptional;
+        private final Optional<DesktopMode> mDesktopModeOptional;
         private final FalsingManager mFalsingManager;
         private final Provider<NavigationBarEdgePanel> mNavBarEdgePanelProvider;
         private final Provider<BackGestureTfClassifierProvider>
@@ -1203,6 +1246,7 @@
                        WindowManager windowManager,
                        IWindowManager windowManagerService,
                        Optional<Pip> pipOptional,
+                       Optional<DesktopMode> desktopModeOptional,
                        FalsingManager falsingManager,
                        Provider<NavigationBarEdgePanel> navBarEdgePanelProvider,
                        Provider<BackGestureTfClassifierProvider>
@@ -1222,6 +1266,7 @@
             mWindowManager = windowManager;
             mWindowManagerService = windowManagerService;
             mPipOptional = pipOptional;
+            mDesktopModeOptional = desktopModeOptional;
             mFalsingManager = falsingManager;
             mNavBarEdgePanelProvider = navBarEdgePanelProvider;
             mBackGestureTfClassifierProviderProvider = backGestureTfClassifierProviderProvider;
@@ -1246,6 +1291,7 @@
                     mWindowManager,
                     mWindowManagerService,
                     mPipOptional,
+                    mDesktopModeOptional,
                     mFalsingManager,
                     mNavBarEdgePanelProvider,
                     mBackGestureTfClassifierProviderProvider,
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt
index c9d8c84..876c74a 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt
@@ -72,9 +72,11 @@
         private set
     var reactivationTriggerThreshold: Float = 0f
         private set
-    var deactivationSwipeTriggerThreshold: Float = 0f
+    var deactivationTriggerThreshold: Float = 0f
         get() = -field
         private set
+    lateinit var dynamicTriggerThresholdRange: ClosedRange<Float>
+        private set
     var swipeProgressThreshold: Float = 0f
         private set
 
@@ -122,8 +124,10 @@
         staticTriggerThreshold = getDimen(R.dimen.navigation_edge_action_drag_threshold)
         reactivationTriggerThreshold =
                 getDimen(R.dimen.navigation_edge_action_reactivation_drag_threshold)
-        deactivationSwipeTriggerThreshold =
+        deactivationTriggerThreshold =
                 getDimen(R.dimen.navigation_edge_action_deactivation_drag_threshold)
+        dynamicTriggerThresholdRange =
+                reactivationTriggerThreshold..deactivationTriggerThreshold
         swipeProgressThreshold = getDimen(R.dimen.navigation_edge_action_progress_threshold)
 
         entryWidthInterpolator = PathInterpolator(.19f, 1.27f, .71f, .86f)
@@ -136,7 +140,6 @@
         edgeCornerInterpolator = PathInterpolator(0f, 1.11f, .85f, .84f)
         heightInterpolator = PathInterpolator(1f, .05f, .9f, -0.29f)
 
-        val entryActiveHorizontalTranslationSpring = createSpring(800f, 0.76f)
         val activeCommittedArrowLengthSpring = createSpring(1500f, 0.29f)
         val activeCommittedArrowHeightSpring = createSpring(1500f, 0.29f)
         val flungCommittedEdgeCornerSpring = createSpring(10000f, 1f)
@@ -150,7 +153,7 @@
                 horizontalTranslation = getDimen(R.dimen.navigation_edge_entry_margin),
                 scale = getDimenFloat(R.dimen.navigation_edge_entry_scale),
                 scalePivotX = getDimen(R.dimen.navigation_edge_pre_threshold_background_width),
-                horizontalTranslationSpring = entryActiveHorizontalTranslationSpring,
+                horizontalTranslationSpring = createSpring(500f, 0.76f),
                 verticalTranslationSpring = createSpring(30000f, 1f),
                 scaleSpring = createSpring(120f, 0.8f),
                 arrowDimens = ArrowDimens(
@@ -202,7 +205,7 @@
         activeIndicator = BackIndicatorDimens(
                 horizontalTranslation = getDimen(R.dimen.navigation_edge_active_margin),
                 scale = getDimenFloat(R.dimen.navigation_edge_active_scale),
-                horizontalTranslationSpring = entryActiveHorizontalTranslationSpring,
+                horizontalTranslationSpring = createSpring(1000f, 0.7f),
                 scaleSpring = createSpring(450f, 0.39f),
                 scalePivotX = getDimen(R.dimen.navigation_edge_active_background_width),
                 arrowDimens = ArrowDimens(
@@ -222,8 +225,8 @@
                         farCornerRadius = getDimen(R.dimen.navigation_edge_active_far_corners),
                         widthSpring = createSpring(850f, 0.75f),
                         heightSpring = createSpring(10000f, 1f),
-                        edgeCornerRadiusSpring = createSpring(600f, 0.36f),
-                        farCornerRadiusSpring = createSpring(2500f, 0.855f),
+                        edgeCornerRadiusSpring = createSpring(2600f, 0.855f),
+                        farCornerRadiusSpring = createSpring(1200f, 0.30f),
                 )
         )
 
@@ -250,10 +253,10 @@
                                 getDimen(R.dimen.navigation_edge_pre_threshold_edge_corners),
                         farCornerRadius =
                                 getDimen(R.dimen.navigation_edge_pre_threshold_far_corners),
-                        widthSpring = createSpring(250f, 0.65f),
+                        widthSpring = createSpring(400f, 0.65f),
                         heightSpring = createSpring(1500f, 0.45f),
-                        farCornerRadiusSpring = createSpring(200f, 1f),
-                        edgeCornerRadiusSpring = createSpring(150f, 0.5f),
+                        farCornerRadiusSpring = createSpring(300f, 1f),
+                        edgeCornerRadiusSpring = createSpring(250f, 0.5f),
                 )
         )
 
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
index 334c70b..8aec0c6 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
@@ -30,11 +30,14 @@
 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
 import android.util.Log
+import android.widget.Toast
 import androidx.annotation.VisibleForTesting
+import com.android.systemui.R
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.devicepolicy.areKeyguardShortcutsDisabled
 import com.android.systemui.notetask.NoteTaskRoleManagerExt.createNoteShortcutInfoAsUser
@@ -82,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" }
@@ -170,7 +173,13 @@
             return
         }
 
-        val info = resolver.resolveInfo(entryPoint, isKeyguardLocked) ?: return
+        val info = resolver.resolveInfo(entryPoint, isKeyguardLocked, user)
+
+        if (info == null) {
+            logDebug { "Default notes app isn't set" }
+            showNoDefaultNotesAppToast()
+            return
+        }
 
         infoReference.set(info)
 
@@ -179,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" }
                 }
@@ -207,6 +217,12 @@
         logDebug { "onShowNoteTask - completed: $info" }
     }
 
+    @VisibleForTesting
+    fun showNoDefaultNotesAppToast() {
+        Toast.makeText(context, R.string.set_default_notes_app_toast_content, Toast.LENGTH_SHORT)
+            .show()
+    }
+
     /**
      * Set `android:enabled` property in the `AndroidManifest` associated with the Shortcut
      * component to [value].
@@ -214,7 +230,7 @@
      * If the shortcut entry `android:enabled` is set to `true`, the shortcut will be visible in the
      * Widget Picker to all users.
      */
-    fun setNoteTaskShortcutEnabled(value: Boolean) {
+    fun setNoteTaskShortcutEnabled(value: Boolean, user: UserHandle) {
         val componentName = ComponentName(context, CreateNoteTaskShortcutActivity::class.java)
 
         val enabledState =
@@ -224,7 +240,16 @@
                 PackageManager.COMPONENT_ENABLED_STATE_DISABLED
             }
 
-        context.packageManager.setComponentEnabledSetting(
+        // If the required user matches the tracking user, the injected context is already a context
+        // of the required user. Avoid calling #createContextAsUser because creating a context for
+        // a user takes time.
+        val userContext =
+            if (user == userTracker.userHandle) {
+                context
+            } else {
+                context.createContextAsUser(user, /* flags= */ 0)
+            }
+        userContext.packageManager.setComponentEnabledSetting(
             componentName,
             enabledState,
             PackageManager.DONT_KILL_APP,
@@ -246,7 +271,7 @@
         val packageName = roleManager.getDefaultRoleHolderAsUser(ROLE_NOTES, user)
         val hasNotesRoleHolder = isEnabled && !packageName.isNullOrEmpty()
 
-        setNoteTaskShortcutEnabled(hasNotesRoleHolder)
+        setNoteTaskShortcutEnabled(hasNotesRoleHolder, user)
 
         if (hasNotesRoleHolder) {
             shortcutManager.enableShortcuts(listOf(SHORTCUT_ID))
@@ -259,7 +284,15 @@
 
     /** @see OnRoleHoldersChangedListener */
     fun onRoleHoldersChanged(roleName: String, user: UserHandle) {
-        if (roleName == ROLE_NOTES) updateNoteTaskAsUser(user)
+        if (roleName != ROLE_NOTES) return
+
+        if (user == userTracker.userHandle) {
+            updateNoteTaskAsUser(user)
+        } else {
+            // TODO(b/278729185): Replace fire and forget service with a bounded service.
+            val intent = NoteTaskControllerUpdateService.createIntent(context)
+            context.startServiceAsUser(intent, user)
+        }
     }
 
     companion object {
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskControllerUpdateService.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskControllerUpdateService.kt
new file mode 100644
index 0000000..26b35cc
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskControllerUpdateService.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.notetask
+
+import android.content.Context
+import android.content.Intent
+import androidx.lifecycle.LifecycleService
+import javax.inject.Inject
+
+/**
+ * A fire & forget service for updating note task shortcuts.
+ *
+ * The main use is to update shortcuts in different user by launching it using `startServiceAsUser`.
+ * The service will open with access to a context from that user, trigger
+ * [NoteTaskController.updateNoteTaskAsUser] and [stopSelf] immediately.
+ *
+ * The fire and forget approach was created due to its simplicity but may use unnecessary resources
+ * by recreating the services. We will investigate its impacts and consider to move to a bounded
+ * services - the implementation is more complex as a bounded service is asynchronous by default.
+ *
+ * TODO(b/278729185): Replace fire and forget service with a bounded service.
+ */
+@InternalNoteTaskApi
+class NoteTaskControllerUpdateService
+@Inject
+constructor(
+    val controller: NoteTaskController,
+) : LifecycleService() {
+
+    override fun onCreate() {
+        super.onCreate()
+        // TODO(b/278729185): Replace fire and forget service with a bounded service.
+        controller.updateNoteTaskAsUser(user)
+        stopSelf()
+    }
+
+    companion object {
+        fun createIntent(context: Context): Intent =
+            Intent(context, NoteTaskControllerUpdateService::class.java)
+    }
+}
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/notetask/NoteTaskInitializer.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInitializer.kt
index 23ee13b..7bb615b 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInitializer.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInitializer.kt
@@ -20,6 +20,7 @@
 import android.view.KeyEvent
 import androidx.annotation.VisibleForTesting
 import com.android.systemui.dagger.qualifiers.Background
+import com.android.systemui.settings.UserTracker
 import com.android.systemui.statusbar.CommandQueue
 import com.android.wm.shell.bubbles.Bubbles
 import java.util.Optional
@@ -36,6 +37,7 @@
     private val optionalBubbles: Optional<Bubbles>,
     @Background private val backgroundExecutor: Executor,
     @NoteTaskEnabledKey private val isEnabled: Boolean,
+    private val userTracker: UserTracker,
 ) {
 
     @VisibleForTesting
@@ -44,8 +46,9 @@
             override fun handleSystemKey(key: KeyEvent) {
                 if (key.keyCode == KeyEvent.KEYCODE_STYLUS_BUTTON_TAIL) {
                     controller.showNoteTask(NoteTaskEntryPoint.TAIL_BUTTON)
-                } else if (key.keyCode == KeyEvent.KEYCODE_N && key.isMetaPressed &&
-                        key.isCtrlPressed) {
+                } else if (
+                    key.keyCode == KeyEvent.KEYCODE_N && key.isMetaPressed && key.isCtrlPressed
+                ) {
                     controller.showNoteTask(NoteTaskEntryPoint.KEYBOARD_SHORTCUT)
                 }
             }
@@ -55,7 +58,7 @@
         // Guard against feature not being enabled or mandatory dependencies aren't available.
         if (!isEnabled || optionalBubbles.isEmpty) return
 
-        controller.setNoteTaskShortcutEnabled(true)
+        controller.setNoteTaskShortcutEnabled(true, userTracker.userHandle)
         commandQueue.addCallback(callbacks)
         roleManager.addOnRoleHoldersChangedListenerAsUser(
             backgroundExecutor,
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskModule.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskModule.kt
index 1839dfd..a166393 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskModule.kt
@@ -14,9 +14,12 @@
  * limitations under the License.
  */
 
+@file:OptIn(InternalNoteTaskApi::class)
+
 package com.android.systemui.notetask
 
 import android.app.Activity
+import android.app.Service
 import android.app.role.RoleManager
 import com.android.systemui.flags.FeatureFlags
 import com.android.systemui.flags.Flags
@@ -34,6 +37,9 @@
 @Module(includes = [NoteTaskQuickAffordanceModule::class])
 interface NoteTaskModule {
 
+    @[Binds IntoMap ClassKey(NoteTaskControllerUpdateService::class)]
+    fun NoteTaskControllerUpdateService.bindNoteTaskControllerUpdateService(): Service
+
     @[Binds IntoMap ClassKey(LaunchNoteTaskActivity::class)]
     fun LaunchNoteTaskActivity.bindNoteTaskLauncherActivity(): Activity
 
diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialog.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialog.kt
index 03145a7..35a7cf1 100644
--- a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialog.kt
+++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyDialog.kt
@@ -90,8 +90,7 @@
         }
     }
 
-    override fun onStop() {
-        super.onStop()
+    override fun stop() {
         dismissed.set(true)
         val iterator = dismissListeners.iterator()
         while (iterator.hasNext()) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
index 0641eec..a3b901b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
@@ -44,6 +44,7 @@
 import android.widget.TextView
 import androidx.annotation.GuardedBy
 import androidx.annotation.VisibleForTesting
+import androidx.annotation.WorkerThread
 import androidx.recyclerview.widget.DiffUtil
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
@@ -201,7 +202,7 @@
     @GuardedBy("lock")
     private val appListAdapter: AppListAdapter = AppListAdapter()
 
-    @GuardedBy("lock")
+    /* Only mutate on the background thread */
     private var runningApps: ArrayMap<UserPackage, RunningApp> = ArrayMap()
 
     private val userTrackerCallback = object : UserTracker.Callback {
@@ -374,11 +375,6 @@
     override fun showDialog(expandable: Expandable?) {
         synchronized(lock) {
             if (dialog == null) {
-
-                runningTaskIdentifiers.keys.forEach {
-                    it.updateUiControl()
-                }
-
                 val dialog = SystemUIDialog(context)
                 dialog.setTitle(R.string.fgs_manager_dialog_title)
                 dialog.setMessage(R.string.fgs_manager_dialog_message)
@@ -421,33 +417,53 @@
                     }
                 }
 
-                backgroundExecutor.execute {
-                    synchronized(lock) {
-                        updateAppItemsLocked()
-                    }
-                }
+                updateAppItemsLocked(refreshUiControls = true)
             }
         }
     }
 
     @GuardedBy("lock")
-    private fun updateAppItemsLocked() {
+    private fun updateAppItemsLocked(refreshUiControls: Boolean = false) {
         if (dialog == null) {
-            runningApps.clear()
+            backgroundExecutor.execute {
+                clearRunningApps()
+            }
             return
         }
 
-        val addedPackages = runningTaskIdentifiers.keys.filter {
-            currentProfileIds.contains(it.userId) &&
+        val packagesToStartTime = runningTaskIdentifiers.mapValues { it.value.startTime }
+        val profileIds = currentProfileIds.toSet()
+        backgroundExecutor.execute {
+            updateAppItems(packagesToStartTime, profileIds, refreshUiControls)
+        }
+    }
+
+    /**
+     * Must be called on the background thread.
+     */
+    @WorkerThread
+    private fun updateAppItems(
+        packages: Map<UserPackage, Long>,
+        profileIds: Set<Int>,
+        refreshUiControls: Boolean = true
+    ) {
+        if (refreshUiControls) {
+            packages.forEach { (pkg, _) ->
+                pkg.updateUiControl()
+            }
+        }
+
+        val addedPackages = packages.keys.filter {
+            profileIds.contains(it.userId) &&
                     it.uiControl != UIControl.HIDE_ENTRY && runningApps[it]?.stopped != true
         }
-        val removedPackages = runningApps.keys.filter { !runningTaskIdentifiers.containsKey(it) }
+        val removedPackages = runningApps.keys.filter { it !in packages }
 
         addedPackages.forEach {
             val ai = packageManager.getApplicationInfoAsUser(it.packageName, 0, it.userId)
             runningApps[it] = RunningApp(
                 it.userId, it.packageName,
-                runningTaskIdentifiers[it]!!.startTime, it.uiControl,
+                packages[it]!!, it.uiControl,
                 packageManager.getApplicationLabel(ai),
                 packageManager.getUserBadgedIcon(
                     packageManager.getApplicationIcon(ai), UserHandle.of(it.userId)
@@ -472,6 +488,14 @@
         }
     }
 
+    /**
+     * Must be called on the background thread.
+     */
+    @WorkerThread
+    private fun clearRunningApps() {
+        runningApps.clear()
+    }
+
     private fun stopPackage(userId: Int, packageName: String, timeStarted: Long) {
         logEvent(stopped = true, packageName, userId, timeStarted)
         val userPackageKey = UserPackage(userId, packageName)
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/QSHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java
index 57b479e..856c64a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSHost.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSHost.java
@@ -20,8 +20,6 @@
 import android.os.Build;
 import android.provider.Settings;
 
-import com.android.internal.logging.InstanceId;
-import com.android.internal.logging.UiEventLogger;
 import com.android.systemui.R;
 import com.android.systemui.plugins.qs.QSFactory;
 import com.android.systemui.plugins.qs.QSTile;
@@ -55,11 +53,9 @@
         return tiles;
     }
 
-    void warn(String message, Throwable t);
     Context getContext();
     Context getUserContext();
     int getUserId();
-    UiEventLogger getUiEventLogger();
     Collection<QSTile> getTiles();
     void addCallback(Callback callback);
     void removeCallback(Callback callback);
@@ -107,8 +103,6 @@
 
     int indexOf(String tileSpec);
 
-    InstanceId getNewInstanceId();
-
     interface Callback {
         void onTilesChanged();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSHostAdapter.kt b/packages/SystemUI/src/com/android/systemui/qs/QSHostAdapter.kt
index 14acb4b..67927a4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSHostAdapter.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSHostAdapter.kt
@@ -19,8 +19,6 @@
 import android.content.ComponentName
 import android.content.Context
 import androidx.annotation.GuardedBy
-import com.android.internal.logging.InstanceId
-import com.android.internal.logging.UiEventLogger
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Application
 import com.android.systemui.dump.DumpManager
@@ -39,10 +37,9 @@
 
 /**
  * Adapter to determine what real class to use for classes that depend on [QSHost].
- *
  * * When [Flags.QS_PIPELINE_NEW_HOST] is off, all calls will be routed to [QSTileHost].
  * * When [Flags.QS_PIPELINE_NEW_HOST] is on, calls regarding the current set of tiles will be
- *   routed to [CurrentTilesInteractor]. Other calls (like [warn]) will still be routed to
+ *   routed to [CurrentTilesInteractor]. Other calls (like [createTileView]) will still be routed to
  *   [QSTileHost].
  *
  * This routing also includes dumps.
@@ -71,10 +68,7 @@
     init {
         scope.launch { tileServiceRequestControllerBuilder.create(this@QSHostAdapter).init() }
         // Redirect dump to the correct host (needed for CTS tests)
-        dumpManager.registerCriticalDumpable(
-            TAG,
-            if (useNewHost) interactor else qsTileHost
-        )
+        dumpManager.registerCriticalDumpable(TAG, if (useNewHost) interactor else qsTileHost)
     }
 
     override fun getTiles(): Collection<QSTile> {
@@ -103,10 +97,7 @@
 
     override fun addCallback(callback: QSHost.Callback) {
         if (useNewHost) {
-            val job =
-                scope.launch {
-                    interactor.currentTiles.collect { callback.onTilesChanged() }
-                }
+            val job = scope.launch { interactor.currentTiles.collect { callback.onTilesChanged() } }
             synchronized(callbacksMap) { callbacksMap.put(callback, job) }
         } else {
             qsTileHost.addCallback(callback)
@@ -147,10 +138,7 @@
 
     override fun addTile(component: ComponentName, end: Boolean) {
         if (useNewHost) {
-            interactor.addTile(
-                TileSpec.create(component),
-                if (end) POSITION_AT_END else 0
-            )
+            interactor.addTile(TileSpec.create(component), if (end) POSITION_AT_END else 0)
         } else {
             qsTileHost.addTile(component, end)
         }
@@ -164,10 +152,6 @@
         }
     }
 
-    override fun warn(message: String?, t: Throwable?) {
-        qsTileHost.warn(message, t)
-    }
-
     override fun getContext(): Context {
         return if (useNewHost) {
             context
@@ -192,10 +176,6 @@
         }
     }
 
-    override fun getUiEventLogger(): UiEventLogger {
-        return qsTileHost.uiEventLogger
-    }
-
     override fun createTileView(
         themedContext: Context?,
         tile: QSTile?,
@@ -219,8 +199,4 @@
     override fun indexOf(tileSpec: String): Int {
         return specs.indexOf(tileSpec)
     }
-
-    override fun getNewInstanceId(): InstanceId {
-        return qsTileHost.newInstanceId
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
index 0ca8973..59b94b7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
@@ -29,9 +29,6 @@
 import androidx.annotation.Nullable;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.logging.InstanceId;
-import com.android.internal.logging.InstanceIdSequence;
-import com.android.internal.logging.UiEventLogger;
 import com.android.systemui.Dumpable;
 import com.android.systemui.ProtoDumpable;
 import com.android.systemui.R;
@@ -91,7 +88,6 @@
         PanelInteractor, CustomTileAddedRepository {
     private static final String TAG = "QSTileHost";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-    private static final int MAX_QS_INSTANCE_ID = 1 << 20;
 
     // Shared prefs that hold tile lifecycle info.
     @VisibleForTesting
@@ -103,8 +99,6 @@
     private final TunerService mTunerService;
     private final PluginManager mPluginManager;
     private final QSLogger mQSLogger;
-    private final UiEventLogger mUiEventLogger;
-    private final InstanceIdSequence mInstanceIdSequence;
     private final CustomTileStatePersister mCustomTileStatePersister;
     private final Executor mMainExecutor;
     private final UserFileManager mUserFileManager;
@@ -137,7 +131,6 @@
             Provider<AutoTileManager> autoTiles,
             Optional<CentralSurfaces> centralSurfacesOptional,
             QSLogger qsLogger,
-            UiEventLogger uiEventLogger,
             UserTracker userTracker,
             SecureSettings secureSettings,
             CustomTileStatePersister customTileStatePersister,
@@ -150,13 +143,11 @@
         mTunerService = tunerService;
         mPluginManager = pluginManager;
         mQSLogger = qsLogger;
-        mUiEventLogger = uiEventLogger;
         mMainExecutor = mainExecutor;
         mTileLifeCycleManagerFactory = tileLifecycleManagerFactory;
         mUserFileManager = userFileManager;
         mFeatureFlags = featureFlags;
 
-        mInstanceIdSequence = new InstanceIdSequence(MAX_QS_INSTANCE_ID);
         mCentralSurfacesOptional = centralSurfacesOptional;
 
         mQsFactories.add(defaultFactory);
@@ -175,11 +166,6 @@
         });
     }
 
-    @Override
-    public InstanceId getNewInstanceId() {
-        return mInstanceIdSequence.newInstanceId();
-    }
-
     public void destroy() {
         mTiles.values().forEach(tile -> tile.destroy());
         mAutoTiles.destroy();
@@ -207,11 +193,6 @@
     }
 
     @Override
-    public UiEventLogger getUiEventLogger() {
-        return mUiEventLogger;
-    }
-
-    @Override
     public void addCallback(Callback callback) {
         mCallbacks.add(callback);
     }
@@ -227,11 +208,6 @@
     }
 
     @Override
-    public void warn(String message, Throwable t) {
-        // already logged
-    }
-
-    @Override
     public void collapsePanels() {
         mCentralSurfacesOptional.ifPresent(CentralSurfaces::postAnimateCollapsePanels);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QsEventLogger.kt b/packages/SystemUI/src/com/android/systemui/qs/QsEventLogger.kt
new file mode 100644
index 0000000..fc739ed
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/QsEventLogger.kt
@@ -0,0 +1,44 @@
+/*
+ * 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.internal.logging.InstanceId
+import com.android.internal.logging.InstanceIdSequence
+import com.android.internal.logging.UiEventLogger
+import com.android.systemui.dagger.SysUISingleton
+import javax.inject.Inject
+
+interface QsEventLogger : UiEventLogger {
+    fun getNewInstanceId(): InstanceId
+}
+
+@SysUISingleton
+class QsEventLoggerImpl
+@Inject
+constructor(
+    uiEventLogger: UiEventLogger,
+) : QsEventLogger, UiEventLogger by uiEventLogger {
+
+    companion object {
+        private const val MAX_QS_INSTANCE_ID = 1 shl 20
+    }
+
+    val sequence = InstanceIdSequence(MAX_QS_INSTANCE_ID)
+    override fun getNewInstanceId(): InstanceId {
+        return sequence.newInstanceId()
+    }
+}
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/dagger/QSHostModule.kt b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSHostModule.kt
index 3ddd9f1c..1f63f5d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSHostModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSHostModule.kt
@@ -21,6 +21,8 @@
 import com.android.systemui.qs.QSHost
 import com.android.systemui.qs.QSHostAdapter
 import com.android.systemui.qs.QSTileHost
+import com.android.systemui.qs.QsEventLogger
+import com.android.systemui.qs.QsEventLoggerImpl
 import com.android.systemui.qs.pipeline.data.repository.CustomTileAddedRepository
 import com.android.systemui.qs.pipeline.data.repository.CustomTileAddedSharedPrefsRepository
 import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor
@@ -34,8 +36,12 @@
 
     @Binds fun provideQsHost(controllerImpl: QSHostAdapter): QSHost
 
+    @Binds fun provideEventLogger(impl: QsEventLoggerImpl): QsEventLogger
+
     @Module
     companion object {
+        private const val MAX_QS_INSTANCE_ID = 1 shl 20
+
         @Provides
         @JvmStatic
         fun providePanelInteractor(
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
index d4854e1..897b0e7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
@@ -59,17 +59,20 @@
 import com.android.systemui.plugins.qs.QSTile.State;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.external.TileLifecycleManager.TileChangeListener;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.settings.DisplayTracker;
 
+import dagger.Lazy;
+
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.inject.Inject;
 
-import dagger.Lazy;
+
 
 public class CustomTile extends QSTileImpl<State> implements TileChangeListener {
     public static final String PREFIX = "custom(";
@@ -111,6 +114,7 @@
 
     private CustomTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             Looper backgroundLooper,
             Handler mainHandler,
             FalsingManager falsingManager,
@@ -124,7 +128,7 @@
             TileServices tileServices,
             DisplayTracker displayTracker
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mTileServices = tileServices;
         mWindowManager = WindowManagerGlobal.getWindowManagerService();
@@ -561,6 +565,7 @@
 
     public static class Builder {
         final Lazy<QSHost> mQSHostLazy;
+        final QsEventLogger mUiEventLogger;
         final Looper mBackgroundLooper;
         final Handler mMainHandler;
         private final FalsingManager mFalsingManager;
@@ -578,6 +583,7 @@
         @Inject
         public Builder(
                 Lazy<QSHost> hostLazy,
+                QsEventLogger uiEventLogger,
                 @Background Looper backgroundLooper,
                 @Main Handler mainHandler,
                 FalsingManager falsingManager,
@@ -590,6 +596,7 @@
                 DisplayTracker displayTracker
         ) {
             mQSHostLazy = hostLazy;
+            mUiEventLogger = uiEventLogger;
             mBackgroundLooper = backgroundLooper;
             mMainHandler = mainHandler;
             mFalsingManager = falsingManager;
@@ -620,6 +627,7 @@
             String action = getAction(mSpec);
             return new CustomTile(
                     mQSHostLazy.get(),
+                    mUiEventLogger,
                     mBackgroundLooper,
                     mMainHandler,
                     mFalsingManager,
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/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
index 49ba508..2a9e7d0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
@@ -66,6 +66,7 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSEvent;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.SideLabelTileLayout;
 import com.android.systemui.qs.logging.QSLogger;
 
@@ -179,6 +180,7 @@
 
     protected QSTileImpl(
             QSHost host,
+            QsEventLogger uiEventLogger,
             Looper backgroundLooper,
             Handler mainHandler,
             FalsingManager falsingManager,
@@ -189,8 +191,8 @@
     ) {
         mHost = host;
         mContext = host.getContext();
-        mInstanceId = host.getNewInstanceId();
-        mUiEventLogger = host.getUiEventLogger();
+        mInstanceId = uiEventLogger.getNewInstanceId();
+        mUiEventLogger = uiEventLogger;
 
         mUiHandler = mainHandler;
         mHandler = new H(backgroundLooper);
@@ -633,7 +635,6 @@
             } catch (Throwable t) {
                 final String error = "Error in " + name;
                 Log.w(TAG, error, t);
-                mHost.warn(error, t);
             }
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
index 92a83bb..30765f7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
@@ -45,15 +45,18 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.SettingObserver;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.settings.UserTracker;
 import com.android.systemui.util.settings.GlobalSettings;
 
+import dagger.Lazy;
+
 import javax.inject.Inject;
 
-import dagger.Lazy;
+
 
 /** Quick settings tile: Airplane mode **/
 public class AirplaneModeTile extends QSTileImpl<BooleanState> {
@@ -69,6 +72,7 @@
     @Inject
     public AirplaneModeTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -81,7 +85,7 @@
             GlobalSettings globalSettings,
             UserTracker userTracker
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mBroadcastDispatcher = broadcastDispatcher;
         mLazyConnectivityManager = lazyConnectivityManager;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt
index 2ca452e..c709969 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AlarmTile.kt
@@ -22,6 +22,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.settings.UserTracker
@@ -31,6 +32,7 @@
 
 class AlarmTile @Inject constructor(
     host: QSHost,
+    uiEventLogger: QsEventLogger,
     @Background backgroundLooper: Looper,
     @Main mainHandler: Handler,
     falsingManager: FalsingManager,
@@ -42,6 +44,7 @@
     nextAlarmController: NextAlarmController
 ) : QSTileImpl<QSTile.State>(
     host,
+    uiEventLogger,
     backgroundLooper,
     mainHandler,
     falsingManager,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
index 027a464..a444e76 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
@@ -37,6 +37,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.SettingObserver;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -62,6 +63,7 @@
     @Inject
     public BatterySaverTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -72,7 +74,7 @@
             BatteryController batteryController,
             SecureSettings secureSettings
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mBatteryController = batteryController;
         mBatteryController.observe(getLifecycle(), this);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
index 08fe270..30218a6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -47,6 +47,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.BluetoothController;
@@ -74,6 +75,7 @@
     @Inject
     public BluetoothTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -83,7 +85,7 @@
             QSLogger qsLogger,
             BluetoothController bluetoothController
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mController = bluetoothController;
         mController.observe(getLifecycle(), mCallback);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java
index 93e5f1e..65ef6b9 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java
@@ -37,6 +37,7 @@
 import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -48,7 +49,9 @@
     public static final String TILE_SPEC = "cameratoggle";
 
     @Inject
-    protected CameraToggleTile(QSHost host,
+    protected CameraToggleTile(
+            QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             MetricsLogger metricsLogger,
@@ -58,7 +61,7 @@
             QSLogger qsLogger,
             IndividualSensorPrivacyController sensorPrivacyController,
             KeyguardStateController keyguardStateController) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger, sensorPrivacyController,
                 keyguardStateController);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
index 8d98481..54376fe 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -47,6 +47,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.connectivity.NetworkController;
@@ -84,6 +85,7 @@
     @Inject
     public CastTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -97,7 +99,7 @@
             HotspotController hotspotController,
             DialogLaunchAnimator dialogLaunchAnimator
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mController = castController;
         mKeyguard = keyguardStateController;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorCorrectionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorCorrectionTile.java
index b6205d5..cf9e346 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorCorrectionTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorCorrectionTile.java
@@ -37,6 +37,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.SettingObserver;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -56,6 +57,7 @@
     @Inject
     public ColorCorrectionTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -66,7 +68,7 @@
             UserTracker userTracker,
             SecureSettings secureSettings
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
 
         mSetting = new SettingObserver(secureSettings, mHandler,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
index 9a44e83..4ecde61 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
@@ -38,6 +38,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.SettingObserver;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -55,6 +56,7 @@
     @Inject
     public ColorInversionTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -65,7 +67,7 @@
             UserTracker userTracker,
             SecureSettings secureSettings
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
 
         mSetting = new SettingObserver(secureSettings, mHandler,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
index add517e..e769b5e 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
@@ -38,6 +38,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.phone.SystemUIDialog;
@@ -58,6 +59,7 @@
     @Inject
     public DataSaverTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -68,7 +70,7 @@
             DataSaverController dataSaverController,
             DialogLaunchAnimator dialogLaunchAnimator
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mDataSaverController = dataSaverController;
         mDialogLaunchAnimator = dialogLaunchAnimator;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt
index 01164fb..ddaff3b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt
@@ -40,6 +40,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import java.util.concurrent.atomic.AtomicBoolean
@@ -47,6 +48,7 @@
 
 class DeviceControlsTile @Inject constructor(
     host: QSHost,
+    uiEventLogger: QsEventLogger,
     @Background backgroundLooper: Looper,
     @Main mainHandler: Handler,
     falsingManager: FalsingManager,
@@ -56,14 +58,15 @@
     qsLogger: QSLogger,
     private val controlsComponent: ControlsComponent
 ) : QSTileImpl<QSTile.State>(
-        host,
-        backgroundLooper,
-        mainHandler,
-        falsingManager,
-        metricsLogger,
-        statusBarStateController,
-        activityStarter,
-        qsLogger
+    host,
+    uiEventLogger,
+    backgroundLooper,
+    mainHandler,
+    falsingManager,
+    metricsLogger,
+    statusBarStateController,
+    activityStarter,
+    qsLogger
 ) {
 
     private var hasControlsApps = AtomicBoolean(false)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
index 434fe45..3e7bdd1 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -54,6 +54,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.SettingObserver;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -88,6 +89,7 @@
     @Inject
     public DndTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -100,7 +102,7 @@
             SecureSettings secureSettings,
             DialogLaunchAnimator dialogLaunchAnimator
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mController = zenModeController;
         mSharedPreferences = sharedPreferences;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java
index f913326..eef4c1d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java
@@ -48,6 +48,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.SettingObserver;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -90,6 +91,7 @@
     @Inject
     public DreamTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -105,7 +107,7 @@
             @Named(DreamModule.DREAM_ONLY_ENABLED_FOR_DOCK_USER)
                     boolean dreamOnlyEnabledForDockUser
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mDreamManager = dreamManager;
         mBroadcastDispatcher = broadcastDispatcher;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
index e091a75..2c986da 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
@@ -37,6 +37,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.FlashlightController;
@@ -55,6 +56,7 @@
     @Inject
     public FlashlightTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -64,7 +66,7 @@
             QSLogger qsLogger,
             FlashlightController flashlightController
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mFlashlightController = flashlightController;
         mFlashlightController.observe(getLifecycle(), this);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FontScalingTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/FontScalingTile.kt
index 3f514344..12d9847 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FontScalingTile.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FontScalingTile.kt
@@ -36,6 +36,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.phone.SystemUIDialog
@@ -47,6 +48,7 @@
 @Inject
 constructor(
     host: QSHost,
+    uiEventLogger: QsEventLogger,
     @Background backgroundLooper: Looper,
     @Main mainHandler: Handler,
     falsingManager: FalsingManager,
@@ -61,6 +63,7 @@
 ) :
     QSTileImpl<QSTile.State?>(
         host,
+        uiEventLogger,
         backgroundLooper,
         mainHandler,
         falsingManager,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
index 6bf8b76..4c3699c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
@@ -41,6 +41,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.DataSaverController;
@@ -61,6 +62,7 @@
     @Inject
     public HotspotTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -71,7 +73,7 @@
             HotspotController hotspotController,
             DataSaverController dataSaverController
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mHotspotController = hotspotController;
         mDataSaverController = dataSaverController;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java
index 75d0172..f16f0dc 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java
@@ -51,6 +51,7 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.AlphaControlledSignalTileView;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
@@ -90,6 +91,7 @@
     @Inject
     public InternetTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -101,7 +103,7 @@
             AccessPointController accessPointController,
             InternetDialogFactory internetDialogFactory
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mInternetDialogFactory = internetDialogFactory;
         mHandler = mainHandler;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
index 27f5826..83c5688 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
@@ -37,6 +37,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -59,6 +60,7 @@
     @Inject
     public LocationTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -70,7 +72,7 @@
             KeyguardStateController keyguardStateController,
             PanelInteractor panelInteractor
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mController = locationController;
         mKeyguard = keyguardStateController;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java
index 2e475d4..86a6a8c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java
@@ -37,6 +37,7 @@
 import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -48,7 +49,9 @@
     public static final String TILE_SPEC = "mictoggle";
 
     @Inject
-    protected MicrophoneToggleTile(QSHost host,
+    protected MicrophoneToggleTile(
+            QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             MetricsLogger metricsLogger,
@@ -58,7 +61,7 @@
             QSLogger qsLogger,
             IndividualSensorPrivacyController sensorPrivacyController,
             KeyguardStateController keyguardStateController) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger, sensorPrivacyController,
                 keyguardStateController);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
index e189f80..29ccb76 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
@@ -43,6 +43,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 
@@ -65,6 +66,7 @@
     @Inject
     public NfcTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -74,7 +76,7 @@
             QSLogger qsLogger,
             BroadcastDispatcher broadcastDispatcher
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mBroadcastDispatcher = broadcastDispatcher;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
index aacd53b..405e139 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
@@ -45,6 +45,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.LocationController;
@@ -80,6 +81,7 @@
     @Inject
     public NightDisplayTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -91,7 +93,7 @@
             ColorDisplayManager colorDisplayManager,
             NightDisplayListenerModule.Builder nightDisplayListenerBuilder
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mLocationController = locationController;
         mManager = colorDisplayManager;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/OneHandedModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/OneHandedModeTile.java
index ae67d99..1eb317a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/OneHandedModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/OneHandedModeTile.java
@@ -36,6 +36,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.SettingObserver;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -57,6 +58,7 @@
     @Inject
     public OneHandedModeTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -66,7 +68,7 @@
             QSLogger qsLogger,
             UserTracker userTracker,
             SecureSettings secureSettings) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mSetting = new SettingObserver(secureSettings, mHandler,
                 Settings.Secure.ONE_HANDED_MODE_ENABLED, userTracker.getUserId()) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QRCodeScannerTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QRCodeScannerTile.java
index 92f5272..9e365d3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QRCodeScannerTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/QRCodeScannerTile.java
@@ -37,6 +37,7 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qrcodescanner.controller.QRCodeScannerController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 
@@ -62,6 +63,7 @@
     @Inject
     public QRCodeScannerTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -70,7 +72,7 @@
             ActivityStarter activityStarter,
             QSLogger qsLogger,
             QRCodeScannerController qrCodeScannerController) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mQRCodeScannerController = qrCodeScannerController;
         mQRCodeScannerController.observe(getLifecycle(), mCallback);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
index 4a3c563..e026bdb 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
@@ -49,6 +49,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -83,6 +84,7 @@
     @Inject
     public QuickAccessWalletTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -94,7 +96,7 @@
             PackageManager packageManager,
             SecureSettings secureSettings,
             QuickAccessWalletController quickAccessWalletController) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mController = quickAccessWalletController;
         mKeyguardStateController = keyguardStateController;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java
index 10f1ce4..2e04afb 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ReduceBrightColorsTile.java
@@ -38,6 +38,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.ReduceBrightColorsController;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -59,6 +60,7 @@
             @Named(RBC_AVAILABLE) boolean isAvailable,
             ReduceBrightColorsController reduceBrightColorsController,
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -67,7 +69,7 @@
             ActivityStarter activityStarter,
             QSLogger qsLogger
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mReduceBrightColorsController = reduceBrightColorsController;
         mReduceBrightColorsController.observe(getLifecycle(), this);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
index 8888c73..7f7f8ad6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
@@ -44,6 +44,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.SettingObserver;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -71,6 +72,7 @@
     @Inject
     public RotationLockTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -83,7 +85,7 @@
             BatteryController batteryController,
             SecureSettings secureSettings
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mController = rotationLockController;
         mController.observe(this, mCallback);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
index 65592a7..2d4652d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
@@ -41,6 +41,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -74,6 +75,7 @@
     @Inject
     public ScreenRecordTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -88,7 +90,7 @@
             DialogLaunchAnimator dialogLaunchAnimator,
             PanelInteractor panelInteractor
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mController = controller;
         mController.observe(this, mCallback);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java
index d99c1d1..7c4f097 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java
@@ -39,6 +39,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
@@ -68,7 +69,9 @@
      */
     public abstract String getRestriction();
 
-    protected SensorPrivacyToggleTile(QSHost host,
+    protected SensorPrivacyToggleTile(
+            QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -78,7 +81,7 @@
             QSLogger qsLogger,
             IndividualSensorPrivacyController sensorPrivacyController,
             KeyguardStateController keyguardStateController) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mSensorPrivacyController = sensorPrivacyController;
         mKeyguard = keyguardStateController;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
index 809689c..a60d1ad 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UiModeNightTile.java
@@ -39,6 +39,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.BatteryController;
@@ -69,6 +70,7 @@
     @Inject
     public UiModeNightTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -80,7 +82,7 @@
             BatteryController batteryController,
             LocationController locationController
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mBatteryController = batteryController;
         mUiModeManager = host.getUserContext().getSystemService(UiModeManager.class);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
index 6a5c990..17e72e5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
@@ -40,6 +40,7 @@
 import com.android.systemui.plugins.qs.QSTile.BooleanState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.phone.ManagedProfileController;
@@ -59,6 +60,7 @@
     @Inject
     public WorkModeTile(
             QSHost host,
+            QsEventLogger uiEventLogger,
             @Background Looper backgroundLooper,
             @Main Handler mainHandler,
             FalsingManager falsingManager,
@@ -68,7 +70,7 @@
             QSLogger qsLogger,
             ManagedProfileController managedProfileController
     ) {
-        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                 statusBarStateController, activityStarter, qsLogger);
         mProfileController = managedProfileController;
         mProfileController.observe(getLifecycle(), this);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java
index 039dafb..380b85c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java
@@ -259,8 +259,7 @@
     }
 
     @Override
-    public void onStart() {
-        super.onStart();
+    public void start() {
         if (DEBUG) {
             Log.d(TAG, "onStart");
         }
@@ -280,8 +279,7 @@
     }
 
     @Override
-    public void onStop() {
-        super.onStop();
+    public void stop() {
         if (DEBUG) {
             Log.d(TAG, "onStop");
         }
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index cffe45f..a43f520 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.recents;
 
+import static android.content.Intent.ACTION_PACKAGE_ADDED;
 import static android.content.Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST;
 import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY;
 import static android.view.MotionEvent.ACTION_CANCEL;
@@ -48,6 +49,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
+import android.content.pm.ResolveInfo;
 import android.graphics.Region;
 import android.hardware.input.InputManager;
 import android.hardware.input.InputManagerGlobal;
@@ -97,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;
@@ -114,6 +116,7 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
@@ -202,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(() -> {
@@ -393,20 +396,29 @@
     private final BroadcastReceiver mLauncherStateChangedReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
-            StringBuilder extraComponentList = new StringBuilder(" components: ");
-            if (intent.hasExtra(EXTRA_CHANGED_COMPONENT_NAME_LIST)) {
-                String[] comps = intent.getStringArrayExtra(EXTRA_CHANGED_COMPONENT_NAME_LIST);
-                if (comps != null) {
-                    for (String c : comps) {
-                        extraComponentList.append(c).append(", ");
-                    }
+            // If adding, bind immediately
+            if (Objects.equals(intent.getAction(), ACTION_PACKAGE_ADDED)) {
+                updateEnabledAndBinding();
+                return;
+            }
+
+            // ACTION_PACKAGE_CHANGED
+            String[] compsList = intent.getStringArrayExtra(EXTRA_CHANGED_COMPONENT_NAME_LIST);
+            if (compsList == null) {
+                return;
+            }
+
+            // Only rebind for TouchInteractionService component from launcher
+            ResolveInfo ri = context.getPackageManager()
+                    .resolveService(new Intent(ACTION_QUICKSTEP), 0);
+            String interestingComponent = ri.serviceInfo.name;
+            for (String component : compsList) {
+                if (interestingComponent.equals(component)) {
+                    Log.i(TAG_OPS, "Rebinding for component [" + component + "] change");
+                    updateEnabledAndBinding();
+                    return;
                 }
             }
-            Log.d(TAG_OPS, "launcherStateChanged intent: " + intent + extraComponentList);
-            updateEnabledState();
-
-            // Reconnect immediately, instead of waiting for resume to arrive.
-            startConnectionToCurrentUser();
         }
     };
 
@@ -621,8 +633,7 @@
         screenLifecycle.addObserver(mScreenLifecycleObserver);
         wakefulnessLifecycle.addObserver(mWakefulnessLifecycleObserver);
         // Connect to the service
-        updateEnabledState();
-        startConnectionToCurrentUser();
+        updateEnabledAndBinding();
 
         // Listen for assistant changes
         assistUtils.registerVoiceInteractionSessionListener(mVoiceInteractionSessionListener);
@@ -644,6 +655,10 @@
     private void dispatchNavigationBarSurface() {
         try {
             if (mOverviewProxy != null) {
+                // Catch all for cases where the surface is no longer valid
+                if (mNavigationBarSurface != null && !mNavigationBarSurface.isValid()) {
+                    mNavigationBarSurface = null;
+                }
                 mOverviewProxy.onNavigationBarSurface(mNavigationBarSurface);
             }
         } catch (RemoteException e) {
@@ -651,14 +666,19 @@
         }
     }
 
+    private void updateEnabledAndBinding() {
+        updateEnabledState();
+        startConnectionToCurrentUser();
+    }
+
     private void updateSystemUiStateFlags() {
         final NavigationBar navBarFragment =
                 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/settings/UserTrackerImpl.kt b/packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt
index 3711a2f..fbf134d 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt
@@ -103,7 +103,7 @@
     @GuardedBy("callbacks")
     private val callbacks: MutableList<DataItem> = ArrayList()
 
-    fun initialize(startingUser: Int) {
+    open fun initialize(startingUser: Int) {
         if (initialized) {
             return
         }
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt
index b445000..5850a84 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt
@@ -47,19 +47,36 @@
             viewsIdToTranslate =
                 setOf(
                     ViewIdToTranslate(R.id.quick_settings_panel, START, filterShade),
-                    ViewIdToTranslate(R.id.notification_stack_scroller, END, filterShade),
-                    ViewIdToTranslate(R.id.statusIcons, END, filterShade),
-                    ViewIdToTranslate(R.id.privacy_container, END, filterShade),
-                    ViewIdToTranslate(R.id.batteryRemainingIcon, END, filterShade),
-                    ViewIdToTranslate(R.id.carrier_group, END, filterShade),
-                    ViewIdToTranslate(R.id.clock, START, filterShade),
-                    ViewIdToTranslate(R.id.date, START, filterShade)),
+                    ViewIdToTranslate(R.id.notification_stack_scroller, END, filterShade)),
             progressProvider = progressProvider)
     }
 
+    private val translateAnimatorStatusBar by lazy {
+        UnfoldConstantTranslateAnimator(
+            viewsIdToTranslate =
+            setOf(
+                ViewIdToTranslate(R.id.statusIcons, END, filterShade),
+                ViewIdToTranslate(R.id.privacy_container, END, filterShade),
+                ViewIdToTranslate(R.id.batteryRemainingIcon, END, filterShade),
+                ViewIdToTranslate(R.id.carrier_group, END, filterShade),
+                ViewIdToTranslate(R.id.clock, START, filterShade),
+                ViewIdToTranslate(R.id.date, START, filterShade)
+            ),
+            progressProvider = progressProvider
+        )
+    }
+
     fun setup(root: ViewGroup) {
         val translationMax =
             context.resources.getDimensionPixelSize(R.dimen.notification_side_paddings).toFloat()
         translateAnimator.init(root, translationMax)
+        val splitShadeStatusBarViewGroup: ViewGroup? =
+            root.findViewById(R.id.split_shade_status_bar)
+        if (splitShadeStatusBarViewGroup != null) {
+            translateAnimatorStatusBar.init(
+                splitShadeStatusBarViewGroup,
+                translationMax
+            )
+        }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index aedd976..d28ccff 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -129,6 +129,7 @@
 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
 import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor;
 import com.android.systemui.keyguard.domain.interactor.KeyguardBottomAreaInteractor;
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
 import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
 import com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants;
@@ -177,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;
@@ -242,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;
@@ -254,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 =
@@ -330,6 +319,7 @@
     private final PulseExpansionHandler mPulseExpansionHandler;
     private final KeyguardBypassController mKeyguardBypassController;
     private final KeyguardUpdateMonitor mUpdateMonitor;
+    private final KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor;
     private final ConversationNotificationManager mConversationNotificationManager;
     private final AuthController mAuthController;
     private final MediaHierarchyManager mMediaHierarchyManager;
@@ -747,7 +737,8 @@
             DumpManager dumpManager,
             KeyguardLongPressViewModel keyguardLongPressViewModel,
             KeyguardInteractor keyguardInteractor,
-            ActivityStarter activityStarter) {
+            ActivityStarter activityStarter,
+            KeyguardFaceAuthInteractor keyguardFaceAuthInteractor) {
         mInteractionJankMonitor = interactionJankMonitor;
         keyguardStateController.addCallback(new KeyguardStateController.Callback() {
             @Override
@@ -867,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);
@@ -891,6 +882,7 @@
         mScreenOffAnimationController = screenOffAnimationController;
         mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;
         mLastDownEvents = new NPVCDownEventState.Buffer(MAX_DOWN_EVENT_BUFFER_SIZE);
+        mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor;
 
         int currentMode = navigationModeController.addListener(
                 mode -> mIsGestureNavigation = QuickStepContract.isGesturalMode(mode));
@@ -1019,7 +1011,7 @@
         mKeyguardStatusBarViewController =
                 mKeyguardStatusBarViewComponentFactory.build(
                                 mKeyguardStatusBar,
-                                mNotificationPanelViewStateProvider)
+                                mShadeViewStateProvider)
                         .getKeyguardStatusBarViewController();
         mKeyguardStatusBarViewController.init();
 
@@ -1029,9 +1021,6 @@
                 userAvatarContainer,
                 keyguardUserSwitcherView);
 
-        NotificationStackScrollLayout stackScrollLayout = mView.findViewById(
-                R.id.notification_stack_scroller);
-        mNotificationStackScrollLayoutController.attach(stackScrollLayout);
         mNotificationStackScrollLayoutController.setOnHeightChangedListener(
                 new NsslHeightChangedListener());
         mNotificationStackScrollLayoutController.setOnEmptySpaceClickListener(
@@ -1614,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;
 
@@ -1705,8 +1691,7 @@
         final float extraSpaceForShelf = lockIconPadding - noShelfOverlapBottomPadding;
 
         if (extraSpaceForShelf > 0f) {
-            return Math.min(mNotificationShelfController.getIntrinsicHeight(),
-                    extraSpaceForShelf);
+            return Math.min(getShelfHeight(), extraSpaceForShelf);
         }
         return 0f;
     }
@@ -1728,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;
@@ -2764,6 +2757,7 @@
                     mShadeLog.v("onMiddleClicked on Keyguard, mDozingOnDown: false");
                     // Try triggering face auth, this "might" run. Check
                     // KeyguardUpdateMonitor#shouldListenForFace to see when face auth won't run.
+                    mKeyguardFaceAuthInteractor.onNotificationPanelClicked();
                     boolean didFaceAuthRun = mUpdateMonitor.requestFaceAuth(
                             FaceAuthApiRequestReason.NOTIFICATION_PANEL_CLICKED);
 
@@ -2812,6 +2806,7 @@
     @Override
     public void setBouncerShowing(boolean bouncerShowing) {
         mBouncerShowing = bouncerShowing;
+        mNotificationStackScrollLayoutController.updateShowEmptyShadeView();
         updateVisibility();
     }
 
@@ -3303,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
@@ -3333,9 +3318,12 @@
 
         mGestureRecorder = recorder;
         mHideExpandedRunnable = hideExpandedRunnable;
-        mNotificationStackScrollLayoutController.setShelfController(notificationShelfController);
         mNotificationShelfController = notificationShelfController;
-        mLockscreenShadeTransitionController.bindController(notificationShelfController);
+        if (!mFeatureFlags.isEnabled(Flags.NOTIFICATION_SHELF_REFACTOR)) {
+            mNotificationStackScrollLayoutController.setShelfController(
+                    notificationShelfController);
+            mLockscreenShadeTransitionController.bindController(notificationShelfController);
+        }
         updateMaxDisplayedNotifications(true);
     }
 
@@ -3425,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,
@@ -4376,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();
@@ -4415,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/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
index 7cb1cbe..ef14d1c 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
@@ -64,6 +64,7 @@
 import com.android.systemui.classifier.FalsingCollector;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.fragments.FragmentHostManager;
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
 import com.android.systemui.media.controls.pipeline.MediaDataManager;
 import com.android.systemui.media.controls.ui.MediaHierarchyManager;
 import com.android.systemui.plugins.FalsingManager;
@@ -132,6 +133,7 @@
     private final FalsingCollector mFalsingCollector;
     private final LockscreenGestureLogger mLockscreenGestureLogger;
     private final ShadeLogger mShadeLog;
+    private final KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor;
     private final FeatureFlags mFeatureFlags;
     private final InteractionJankMonitor mInteractionJankMonitor;
     private final FalsingManager mFalsingManager;
@@ -318,7 +320,8 @@
             MetricsLogger metricsLogger,
             FeatureFlags featureFlags,
             InteractionJankMonitor interactionJankMonitor,
-            ShadeLogger shadeLog
+            ShadeLogger shadeLog,
+            KeyguardFaceAuthInteractor keyguardFaceAuthInteractor
     ) {
         mPanelViewControllerLazy = panelViewControllerLazy;
         mPanelView = panelView;
@@ -357,6 +360,7 @@
         mLockscreenGestureLogger = lockscreenGestureLogger;
         mMetricsLogger = metricsLogger;
         mShadeLog = shadeLog;
+        mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor;
         mFeatureFlags = featureFlags;
         mInteractionJankMonitor = interactionJankMonitor;
 
@@ -937,6 +941,7 @@
         // When expanding QS, let's authenticate the user if possible,
         // this will speed up notification actions.
         if (height == 0 && !mKeyguardStateController.canDismissLockScreen()) {
+            mKeyguardFaceAuthInteractor.onQsExpansionStared();
             mKeyguardUpdateMonitor.requestFaceAuth(FaceAuthApiRequestReason.QS_EXPANDED);
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
index b4653be..f0815e9 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
@@ -19,11 +19,14 @@
 import android.animation.Animator
 import android.animation.AnimatorListenerAdapter
 import android.annotation.IdRes
+import android.app.PendingIntent
 import android.app.StatusBarManager
+import android.content.Intent
 import android.content.res.Configuration
 import android.os.Bundle
 import android.os.Trace
 import android.os.Trace.TRACE_TAG_APP
+import android.provider.AlarmClock
 import android.util.Pair
 import android.view.DisplayCutout
 import android.view.View
@@ -41,6 +44,7 @@
 import com.android.systemui.demomode.DemoMode
 import com.android.systemui.demomode.DemoModeController
 import com.android.systemui.dump.DumpManager
+import com.android.systemui.plugins.ActivityStarter
 import com.android.systemui.qs.ChipVisibilityListener
 import com.android.systemui.qs.HeaderPrivacyIconsController
 import com.android.systemui.shade.ShadeHeaderController.Companion.HEADER_TRANSITION_ID
@@ -58,6 +62,7 @@
 import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.SHADE_HEADER
 import com.android.systemui.statusbar.policy.Clock
 import com.android.systemui.statusbar.policy.ConfigurationController
+import com.android.systemui.statusbar.policy.NextAlarmController
 import com.android.systemui.statusbar.policy.VariableDateView
 import com.android.systemui.statusbar.policy.VariableDateViewController
 import com.android.systemui.util.ViewController
@@ -91,6 +96,8 @@
     private val combinedShadeHeadersConstraintManager: CombinedShadeHeadersConstraintManager,
     private val demoModeController: DemoModeController,
     private val qsBatteryModeController: QsBatteryModeController,
+    private val nextAlarmController: NextAlarmController,
+    private val activityStarter: ActivityStarter,
 ) : ViewController<View>(header), Dumpable {
 
     companion object {
@@ -103,6 +110,8 @@
         @VisibleForTesting
         internal val LARGE_SCREEN_HEADER_CONSTRAINT = R.id.large_screen_header_constraint
 
+        @VisibleForTesting internal val DEFAULT_CLOCK_INTENT = Intent(AlarmClock.ACTION_SHOW_ALARMS)
+
         private fun Int.stateToString() =
             when (this) {
                 QQS_HEADER_CONSTRAINT -> "QQS Header"
@@ -125,6 +134,7 @@
     private var roundedCorners = 0
     private var cutout: DisplayCutout? = null
     private var lastInsets: WindowInsets? = null
+    private var nextAlarmIntent: PendingIntent? = null
 
     private var qsDisabled = false
     private var visible = false
@@ -252,6 +262,11 @@
             }
         }
 
+    private val nextAlarmCallback =
+        NextAlarmController.NextAlarmChangeCallback { nextAlarm ->
+            nextAlarmIntent = nextAlarm?.showIntent
+        }
+
     override fun onInit() {
         variableDateViewControllerFactory.create(date as VariableDateView).init()
         batteryMeterViewController.init()
@@ -286,19 +301,23 @@
 
             mShadeCarrierGroup.setPaddingRelative((v.width * v.scaleX).toInt(), 0, 0, 0)
         }
+        clock.setOnClickListener { launchClockActivity() }
 
         dumpManager.registerDumpable(this)
         configurationController.addCallback(configurationControllerListener)
         demoModeController.addCallback(demoModeReceiver)
         statusBarIconController.addIconGroup(iconManager)
+        nextAlarmController.addCallback(nextAlarmCallback)
     }
 
     override fun onViewDetached() {
+        clock.setOnClickListener(null)
         privacyIconsController.chipVisibilityListener = null
         dumpManager.unregisterDumpable(this::class.java.simpleName)
         configurationController.removeCallback(configurationControllerListener)
         demoModeController.removeCallback(demoModeReceiver)
         statusBarIconController.removeIconGroup(iconManager)
+        nextAlarmController.removeCallback(nextAlarmCallback)
     }
 
     fun disable(state1: Int, state2: Int, animate: Boolean) {
@@ -318,6 +337,15 @@
             .start()
     }
 
+    @VisibleForTesting
+    internal fun launchClockActivity() {
+        if (nextAlarmIntent != null) {
+            activityStarter.postStartActivityDismissingKeyguard(nextAlarmIntent)
+        } else {
+            activityStarter.postStartActivityDismissingKeyguard(DEFAULT_CLOCK_INTENT, 0 /*delay */)
+        }
+    }
+
     private fun loadConstraints() {
         // Use resources.getXml instead of passing the resource id due to bug b/205018300
         header
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..4c6673c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt
@@ -0,0 +1,93 @@
+/*
+ * 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.CoreStartable
+import com.android.systemui.R
+import com.android.systemui.biometrics.AuthRippleController
+import com.android.systemui.biometrics.AuthRippleView
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.statusbar.LightRevealScrim
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
+import dagger.Binds
+import dagger.Module
+import dagger.Provides
+import dagger.multibindings.ClassKey
+import dagger.multibindings.IntoMap
+
+/** Module for classes related to the notification shade. */
+@Module
+abstract class ShadeModule {
+
+    @Binds
+    @IntoMap
+    @ClassKey(AuthRippleController::class)
+    abstract fun bindAuthRippleController(controller: AuthRippleController): CoreStartable
+
+    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)
+        }
+
+        @Provides
+        @SysUISingleton
+        fun providesLightRevealScrim(
+            notificationShadeWindowView: NotificationShadeWindowView,
+        ): LightRevealScrim {
+            return notificationShadeWindowView.findViewById(R.id.light_reveal_scrim)
+        }
+
+        // TODO(b/277762009): Only allow this view's controller to inject the view. See above.
+        @Provides
+        @SysUISingleton
+        fun providesAuthRippleView(
+            notificationShadeWindowView: NotificationShadeWindowView,
+        ): AuthRippleView? {
+            return notificationShadeWindowView.findViewById(R.id.auth_ripple)
+        }
+    }
+}
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 ced725e..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
         }
@@ -702,6 +711,19 @@
         mProcessArtworkTasks.remove(task);
     }
 
+    // TODO(b/273443374): remove
+    public boolean isLockscreenWallpaperOnNotificationShade() {
+        return mBackdrop != null && mLockscreenWallpaper != null
+                && !mLockscreenWallpaper.isLockscreenLiveWallpaperEnabled()
+                && (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/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index d1c6aef..7eb63da 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -53,6 +53,8 @@
 import com.android.systemui.statusbar.notification.stack.AmbientState;
 import com.android.systemui.statusbar.notification.stack.AnimationProperties;
 import com.android.systemui.statusbar.notification.stack.ExpandableViewState;
+import com.android.systemui.statusbar.notification.stack.NotificationRoundnessManager;
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
 import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm;
 import com.android.systemui.statusbar.notification.stack.ViewState;
@@ -99,6 +101,9 @@
     private boolean mSensitiveRevealAnimEndabled;
     private boolean mShelfRefactorFlagEnabled;
     private boolean mCanModifyColorOfNotifications;
+    private boolean mCanInteract;
+    private NotificationStackScrollLayout mHostLayout;
+    private NotificationRoundnessManager mRoundnessManager;
 
     public NotificationShelf(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -135,6 +140,7 @@
 
     public void bind(AmbientState ambientState,
                      NotificationStackScrollLayoutController hostLayoutController) {
+        assertRefactorFlagDisabled();
         mAmbientState = ambientState;
         mHostLayoutController = hostLayoutController;
         hostLayoutController.setOnNotificationRemovedListener((child, isTransferInProgress) -> {
@@ -142,6 +148,14 @@
         });
     }
 
+    public void bind(AmbientState ambientState, NotificationStackScrollLayout hostLayout,
+            NotificationRoundnessManager roundnessManager) {
+        if (!checkRefactorFlagEnabled()) return;
+        mAmbientState = ambientState;
+        mHostLayout = hostLayout;
+        mRoundnessManager = roundnessManager;
+    }
+
     private void updateResources() {
         Resources res = getResources();
         mStatusBarHeight = SystemBarUtils.getStatusBarHeight(mContext);
@@ -233,7 +247,7 @@
             } else {
                 viewState.setAlpha(1f - ambientState.getHideAmount());
             }
-            viewState.belowSpeedBump = mHostLayoutController.getSpeedBumpIndex() == 0;
+            viewState.belowSpeedBump = getSpeedBumpIndex() == 0;
             viewState.hideSensitive = false;
             viewState.setXTranslation(getTranslationX());
             viewState.hasItemsInStableShelf = lastViewState.inShelf;
@@ -276,6 +290,14 @@
         }
     }
 
+    private int getSpeedBumpIndex() {
+        if (mShelfRefactorFlagEnabled) {
+            return mHostLayout.getSpeedBumpIndex();
+        } else {
+            return mHostLayoutController.getSpeedBumpIndex();
+        }
+    }
+
     /**
      * @param fractionToShade Fraction of lockscreen to shade transition
      * @param shortestWidth   Shortest width to use for lockscreen shelf
@@ -388,8 +410,8 @@
         int baseZHeight = mAmbientState.getBaseZHeight();
         int clipTopAmount = 0;
 
-        for (int i = 0; i < mHostLayoutController.getChildCount(); i++) {
-            ExpandableView child = mHostLayoutController.getChildAt(i);
+        for (int i = 0; i < getHostLayoutChildCount(); i++) {
+            ExpandableView child = getHostLayoutChildAt(i);
             if (!child.needsClippingToShelf() || child.getVisibility() == GONE) {
                 continue;
             }
@@ -474,11 +496,11 @@
 
         // TODO(b/172289889) transition last icon in shelf to notification icon and vice versa.
         setVisibility(isHidden ? View.INVISIBLE : View.VISIBLE);
-        mShelfIcons.setSpeedBumpIndex(mHostLayoutController.getSpeedBumpIndex());
+        mShelfIcons.setSpeedBumpIndex(getSpeedBumpIndex());
         mShelfIcons.calculateIconXTranslations();
         mShelfIcons.applyIconStates();
-        for (int i = 0; i < mHostLayoutController.getChildCount(); i++) {
-            View child = mHostLayoutController.getChildAt(i);
+        for (int i = 0; i < getHostLayoutChildCount(); i++) {
+            View child = getHostLayoutChildAt(i);
             if (!(child instanceof ExpandableNotificationRow)
                     || child.getVisibility() == GONE) {
                 continue;
@@ -493,6 +515,22 @@
         }
     }
 
+    private ExpandableView getHostLayoutChildAt(int index) {
+        if (mShelfRefactorFlagEnabled) {
+            return (ExpandableView) mHostLayout.getChildAt(index);
+        } else {
+            return mHostLayoutController.getChildAt(index);
+        }
+    }
+
+    private int getHostLayoutChildCount() {
+        if (mShelfRefactorFlagEnabled) {
+            return mHostLayout.getChildCount();
+        } else {
+            return mHostLayoutController.getChildCount();
+        }
+    }
+
     private boolean canModifyColorOfNotifications() {
         if (mShelfRefactorFlagEnabled) {
             return mCanModifyColorOfNotifications && mAmbientState.isShadeExpanded();
@@ -515,7 +553,7 @@
                 && anv == mAmbientState.getTrackedHeadsUpRow();
 
         final boolean shouldUpdateCornerRoundness = viewStart < shelfStart
-                && !mHostLayoutController.isViewAffectedBySwipe(anv)
+                && !isViewAffectedBySwipe(anv)
                 && !isUnlockedHeadsUp
                 && !isHunGoingToShade
                 && !anv.isAboveShelf()
@@ -567,6 +605,14 @@
         anv.requestBottomRoundness(bottomValue, sourceType, /* animate = */ false);
     }
 
+    private boolean isViewAffectedBySwipe(ExpandableView expandableView) {
+        if (!mShelfRefactorFlagEnabled) {
+            return mHostLayoutController.isViewAffectedBySwipe(expandableView);
+        } else {
+            return mRoundnessManager.isViewAffectedBySwipe(expandableView);
+        }
+    }
+
     /**
      * Clips transient views to the top of the shelf - Transient views are only used for
      * disappearing views/animations and need to be clipped correctly by the shelf to ensure they
@@ -574,8 +620,8 @@
      * swipes quickly.
      */
     private void clipTransientViews() {
-        for (int i = 0; i < mHostLayoutController.getTransientViewCount(); i++) {
-            View transientView = mHostLayoutController.getTransientView(i);
+        for (int i = 0; i < getHostLayoutTransientViewCount(); i++) {
+            View transientView = getHostLayoutTransientView(i);
             if (transientView instanceof ExpandableView) {
                 ExpandableView transientExpandableView = (ExpandableView) transientView;
                 updateNotificationClipHeight(transientExpandableView, getTranslationY(), -1);
@@ -583,6 +629,22 @@
         }
     }
 
+    private View getHostLayoutTransientView(int index) {
+        if (mShelfRefactorFlagEnabled) {
+            return mHostLayout.getTransientView(index);
+        } else {
+            return mHostLayoutController.getTransientView(index);
+        }
+    }
+
+    private int getHostLayoutTransientViewCount() {
+        if (mShelfRefactorFlagEnabled) {
+            return mHostLayout.getTransientViewCount();
+        } else {
+            return mHostLayoutController.getTransientViewCount();
+        }
+    }
+
     private void updateIconClipAmount(ExpandableNotificationRow row) {
         float maxTop = row.getTranslationY();
         if (getClipTopAmount() != 0) {
@@ -922,18 +984,27 @@
 
     @Override
     public void onStateChanged(int newState) {
+        assertRefactorFlagDisabled();
         mStatusBarState = newState;
         updateInteractiveness();
     }
 
     private void updateInteractiveness() {
-        mInteractive = mStatusBarState == StatusBarState.KEYGUARD && mHasItemsInStableShelf;
+        mInteractive = canInteract() && mHasItemsInStableShelf;
         setClickable(mInteractive);
         setFocusable(mInteractive);
         setImportantForAccessibility(mInteractive ? View.IMPORTANT_FOR_ACCESSIBILITY_YES
                 : View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
     }
 
+    private boolean canInteract() {
+        if (mShelfRefactorFlagEnabled) {
+            return mCanInteract;
+        } else {
+            return mStatusBarState == StatusBarState.KEYGUARD;
+        }
+    }
+
     @Override
     protected boolean isInteractive() {
         return mInteractive;
@@ -972,8 +1043,7 @@
 
     private void assertRefactorFlagDisabled() {
         if (mShelfRefactorFlagEnabled) {
-            throw new IllegalStateException(
-                    "Code path not supported when Flags.NOTIFICATION_SHELF_REFACTOR is enabled.");
+            NotificationShelfController.throwIllegalFlagStateError(false);
         }
     }
 
@@ -995,8 +1065,22 @@
         mCanModifyColorOfNotifications = canModifyColorOfNotifications;
     }
 
+    public void setCanInteract(boolean canInteract) {
+        if (!checkRefactorFlagEnabled()) return;
+        mCanInteract = canInteract;
+        updateInteractiveness();
+    }
+
     public void setIndexOfFirstViewInShelf(ExpandableView firstViewInShelf) {
-        mIndexOfFirstViewInShelf = mHostLayoutController.indexOfChild(firstViewInShelf);
+        mIndexOfFirstViewInShelf = getIndexOfViewInHostLayout(firstViewInShelf);
+    }
+
+    private int getIndexOfViewInHostLayout(ExpandableView child) {
+        if (mShelfRefactorFlagEnabled) {
+            return mHostLayout.indexOfChild(child);
+        } else {
+            return mHostLayoutController.indexOfChild(child);
+        }
     }
 
     /**
@@ -1011,6 +1095,11 @@
         mShelfRefactorFlagEnabled = enabled;
     }
 
+    public void requestRoundnessResetFor(ExpandableView child) {
+        if (!checkRefactorFlagEnabled()) return;
+        child.requestRoundnessReset(SHELF_SCROLL);
+    }
+
     /**
      * This method resets the OnScroll roundness of a view to 0f
      * <p>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelfController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelfController.kt
index bf3d47c..1619dda 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelfController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelfController.kt
@@ -16,10 +16,11 @@
 
 package com.android.systemui.statusbar
 
+import android.util.Log
 import android.view.View
 import android.view.View.OnClickListener
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView.OnActivatedListener
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
 import com.android.systemui.statusbar.notification.row.ExpandableView
 import com.android.systemui.statusbar.notification.stack.AmbientState
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
@@ -40,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,
@@ -51,4 +49,29 @@
 
     /** @see View.setOnClickListener */
     fun setOnClickListener(listener: OnClickListener)
+
+    companion object {
+        @JvmStatic
+        fun assertRefactorFlagDisabled(featureFlags: FeatureFlags) {
+            if (featureFlags.isEnabled(Flags.NOTIFICATION_SHELF_REFACTOR)) {
+                throwIllegalFlagStateError(expected = false)
+            }
+        }
+
+        @JvmStatic
+        fun checkRefactorFlagEnabled(featureFlags: FeatureFlags): Boolean =
+            featureFlags.isEnabled(Flags.NOTIFICATION_SHELF_REFACTOR).also { enabled ->
+                if (!enabled) {
+                    Log.wtf("NotifShelf", getErrorMessage(expected = true))
+                }
+            }
+
+        @JvmStatic
+        fun throwIllegalFlagStateError(expected: Boolean): Nothing =
+            error(getErrorMessage(expected))
+
+        private fun getErrorMessage(expected: Boolean): String =
+            "Code path not supported when Flags.NOTIFICATION_SHELF_REFACTOR is " +
+                if (expected) "disabled" else "enabled"
+    }
 }
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/AnimatableProperty.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/AnimatableProperty.java
index ecd0c41..fcff437 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/AnimatableProperty.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/AnimatableProperty.java
@@ -48,6 +48,10 @@
             View.SCALE_Y, R.id.scale_y_animator_tag, R.id.scale_y_animator_start_value_tag,
             R.id.scale_y_animator_end_value_tag);
 
+    public static final AnimatableProperty ALPHA = AnimatableProperty.from(
+            View.ALPHA, R.id.alpha_animator_tag, R.id.alpha_animator_start_value_tag,
+            R.id.alpha_animator_end_value_tag);
+
     /**
      * Similar to X, however this doesn't allow for any other modifications other than from this
      * property. When using X, it's possible that the view is laid out during the animation,
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/Roundable.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/Roundable.kt
index 6deef2e..76ff97d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/Roundable.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/Roundable.kt
@@ -383,11 +383,11 @@
     }
 
     fun debugString() = buildString {
-        append("TargetView: ${targetView.hashCode()} ")
-        append("Top: $topRoundness ")
-        append(topRoundnessMap.map { "${it.key} ${it.value}" })
-        append(" Bottom: $bottomRoundness ")
-        append(bottomRoundnessMap.map { "${it.key} ${it.value}" })
+        append("Roundable { ")
+        append("top: { value: $topRoundness, requests: $topRoundnessMap}")
+        append(", ")
+        append("bottom: { value: $bottomRoundness, requests: $bottomRoundnessMap}")
+        append("}")
     }
 
     companion object {
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..23b5241 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
@@ -38,8 +38,7 @@
 import com.android.systemui.statusbar.notification.collection.render.NodeController
 import com.android.systemui.statusbar.notification.dagger.IncomingHeader
 import com.android.systemui.statusbar.notification.interruption.HeadsUpViewBinder
-import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider
-import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider.FullScreenIntentDecision
+import com.android.systemui.statusbar.notification.interruption.VisualInterruptionDecisionProvider
 import com.android.systemui.statusbar.notification.logKey
 import com.android.systemui.statusbar.notification.stack.BUCKET_HEADS_UP
 import com.android.systemui.statusbar.policy.HeadsUpManager
@@ -69,12 +68,12 @@
     private val mSystemClock: SystemClock,
     private val mHeadsUpManager: HeadsUpManager,
     private val mHeadsUpViewBinder: HeadsUpViewBinder,
-    private val mNotificationInterruptStateProvider: NotificationInterruptStateProvider,
+    private val mVisualInterruptionDecisionProvider: VisualInterruptionDecisionProvider,
     private val mRemoteInputManager: NotificationRemoteInputManager,
     private val mLaunchFullScreenIntentProvider: LaunchFullScreenIntentProvider,
     private val mFlags: NotifPipelineFlags,
     @IncomingHeader private val mIncomingHeaderController: NodeController,
-    @Main private val mExecutor: DelayableExecutor,
+    @Main private val mExecutor: DelayableExecutor
 ) : Coordinator {
     private val mEntriesBindingUntil = ArrayMap<String, Long>()
     private val mEntriesUpdateTimes = ArrayMap<String, Long>()
@@ -388,19 +387,21 @@
         override fun onEntryAdded(entry: NotificationEntry) {
             // First check whether this notification should launch a full screen intent, and
             // launch it if needed.
-            val fsiDecision = mNotificationInterruptStateProvider.getFullScreenIntentDecision(entry)
-            mNotificationInterruptStateProvider.logFullScreenIntentDecision(entry, fsiDecision)
-            if (fsiDecision.shouldLaunch) {
+            val fsiDecision =
+                mVisualInterruptionDecisionProvider.makeUnloggedFullScreenIntentDecision(entry)
+            mVisualInterruptionDecisionProvider.logFullScreenIntentDecision(fsiDecision)
+            if (fsiDecision.shouldInterrupt) {
                 mLaunchFullScreenIntentProvider.launchFullScreenIntent(entry)
-            } else if (mFlags.fsiOnDNDUpdate() &&
-                fsiDecision == FullScreenIntentDecision.NO_FSI_SUPPRESSED_ONLY_BY_DND) {
+            } else if (fsiDecision.wouldInterruptWithoutDnd) {
                 // If DND was the only reason this entry was suppressed, note it for potential
                 // reconsideration on later ranking updates.
                 addForFSIReconsideration(entry, mSystemClock.currentTimeMillis())
             }
 
-            // shouldHeadsUp includes check for whether this notification should be filtered
-            val shouldHeadsUpEver = mNotificationInterruptStateProvider.shouldHeadsUp(entry)
+            // makeAndLogHeadsUpDecision includes check for whether this notification should be
+            // filtered
+            val shouldHeadsUpEver =
+                mVisualInterruptionDecisionProvider.makeAndLogHeadsUpDecision(entry).shouldInterrupt
             mPostedEntries[entry.key] = PostedEntry(
                 entry,
                 wasAdded = true,
@@ -421,7 +422,8 @@
          * up again.
          */
         override fun onEntryUpdated(entry: NotificationEntry) {
-            val shouldHeadsUpEver = mNotificationInterruptStateProvider.shouldHeadsUp(entry)
+            val shouldHeadsUpEver =
+                mVisualInterruptionDecisionProvider.makeAndLogHeadsUpDecision(entry).shouldInterrupt
             val shouldHeadsUpAgain = shouldHunAgain(entry)
             val isAlerting = mHeadsUpManager.isAlerting(entry.key)
             val isBinding = isEntryBinding(entry)
@@ -509,28 +511,28 @@
                 //   - 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) {
+                        mVisualInterruptionDecisionProvider.makeUnloggedFullScreenIntentDecision(
+                            entry
+                        )
+                    if (decision.shouldInterrupt) {
                         // Log both the launch of the full screen and also that this was via a
                         // ranking update, and finally revoke candidacy for FSI reconsideration
-                        mLogger.logEntryUpdatedToFullScreen(entry.key, decision.name)
-                        mNotificationInterruptStateProvider.logFullScreenIntentDecision(
-                            entry, decision)
+                        mLogger.logEntryUpdatedToFullScreen(entry.key, decision.logReason)
+                        mVisualInterruptionDecisionProvider.logFullScreenIntentDecision(decision)
                         mLaunchFullScreenIntentProvider.launchFullScreenIntent(entry)
                         mFSIUpdateCandidates.remove(entry.key)
 
                         // if we launch the FSI then this is no longer a candidate for HUN
                         continue
-                    } else if (decision == FullScreenIntentDecision.NO_FSI_SUPPRESSED_ONLY_BY_DND) {
+                    } else if (decision.wouldInterruptWithoutDnd) {
                         // decision has not changed; no need to log
                     } else {
                         // some other condition is now blocking FSI; log that and revoke candidacy
                         // for FSI reconsideration
-                        mLogger.logEntryDisqualifiedFromFullScreen(entry.key, decision.name)
-                        mNotificationInterruptStateProvider.logFullScreenIntentDecision(
-                            entry, decision)
+                        mLogger.logEntryDisqualifiedFromFullScreen(entry.key, decision.logReason)
+                        mVisualInterruptionDecisionProvider.logFullScreenIntentDecision(decision)
                         mFSIUpdateCandidates.remove(entry.key)
                     }
                 }
@@ -540,13 +542,18 @@
                 //   state
                 // - if it is present in PostedEntries and the previous state of shouldHeadsUp
                 //   differs from the updated one
-                val shouldHeadsUpEver = mNotificationInterruptStateProvider.checkHeadsUp(entry,
-                                /* log= */ false)
+                val decision =
+                    mVisualInterruptionDecisionProvider.makeUnloggedHeadsUpDecision(entry)
+                val shouldHeadsUpEver = decision.shouldInterrupt
                 val postedShouldHeadsUpEver = mPostedEntries[entry.key]?.shouldHeadsUpEver ?: false
                 val shouldUpdateEntry = postedShouldHeadsUpEver != shouldHeadsUpEver
 
                 if (shouldUpdateEntry) {
-                    mLogger.logEntryUpdatedByRanking(entry.key, shouldHeadsUpEver)
+                    mLogger.logEntryUpdatedByRanking(
+                        entry.key,
+                        shouldHeadsUpEver,
+                        decision.logReason
+                    )
                     onEntryUpdated(entry)
                 }
             }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorLogger.kt
index e936559..32c3c66 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorLogger.kt
@@ -61,12 +61,13 @@
         })
     }
 
-    fun logEntryUpdatedByRanking(key: String, shouldHun: Boolean) {
+    fun logEntryUpdatedByRanking(key: String, shouldHun: Boolean, reason: String) {
         buffer.log(TAG, LogLevel.DEBUG, {
             str1 = key
             bool1 = shouldHun
+            str2 = reason
         }, {
-            "updating entry via ranking applied: $str1 updated shouldHeadsUp=$bool1"
+            "updating entry via ranking applied: $str1 updated shouldHeadsUp=$bool1 because $str2"
         })
     }
 
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 82bd45c..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,9 +21,15 @@
 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
+import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.keyguard.shared.model.TransitionStep
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.statusbar.StatusBarState
 import com.android.systemui.statusbar.expansionChanges
@@ -38,8 +44,11 @@
 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
@@ -48,14 +57,19 @@
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.coroutineScope
 import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.collectLatest
 import kotlinx.coroutines.flow.conflate
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.emitAll
 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
 
 /**
  * Filters low priority and privacy-sensitive notifications from the lockscreen, and hides section
@@ -66,16 +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
@@ -86,9 +103,7 @@
         pipeline.addFinalizeFilter(notifFilter)
         keyguardNotificationVisibilityProvider.addOnStateChangedListener(::invalidateListFromFilter)
         updateSectionHeadersVisibility()
-        if (notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard) {
-            attachUnseenFilter(pipeline)
-        }
+        attachUnseenFilter(pipeline)
     }
 
     private fun attachUnseenFilter(pipeline: NotifPipeline) {
@@ -96,24 +111,54 @@
         pipeline.addCollectionListener(collectionListener)
         scope.launch { trackUnseenNotificationsWhileUnlocked() }
         scope.launch { invalidateWhenUnseenSettingChanges() }
+        dumpManager.registerDumpable(this)
     }
 
     private suspend fun trackUnseenNotificationsWhileUnlocked() {
+        // Whether or not we're actively tracking unseen notifications to mark them as seen when
+        // appropriate.
+        val isTrackingUnseen: Flow<Boolean> =
+            keyguardRepository.isKeyguardShowing
+                // transformLatest so that we can cancel listening to keyguard transitions once
+                // isKeyguardShowing changes (after a successful transition to the keyguard).
+                .transformLatest { isShowing ->
+                    if (isShowing) {
+                        // If the keyguard is showing, we're not tracking unseen.
+                        emit(false)
+                    } else {
+                        // If the keyguard stops showing, then start tracking unseen notifications.
+                        emit(true)
+                        // If the screen is turning off, stop tracking, but if that transition is
+                        // cancelled, then start again.
+                        emitAll(
+                            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
-        var clearUnseenOnUnlock = false
-        keyguardRepository.isKeyguardShowing.collectLatest { isKeyguardShowing ->
-            if (isKeyguardShowing) {
+        var clearUnseenOnBeginTracking = false
+        isTrackingUnseen.collectLatest { trackingUnseen ->
+            if (!trackingUnseen) {
                 // Wait for the user to spend enough time on the lock screen before clearing unseen
                 // set when unlocked
                 awaitTimeSpentNotDozing(SEEN_TIMEOUT)
-                clearUnseenOnUnlock = true
+                clearUnseenOnBeginTracking = true
+                logger.logSeenOnLockscreen()
             } else {
-                unseenNotifFilter.invalidateList("keyguard no longer showing")
-                if (clearUnseenOnUnlock) {
-                    clearUnseenOnUnlock = false
+                if (clearUnseenOnBeginTracking) {
+                    clearUnseenOnBeginTracking = false
+                    logger.logAllMarkedSeenOnUnlock()
                     unseenNotifications.clear()
                 }
+                unseenNotifFilter.invalidateList("keyguard no longer showing")
                 trackUnseenNotifications()
             }
         }
@@ -134,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() }
@@ -142,8 +189,12 @@
     }
 
     private suspend fun clearUnseenNotificationsWhenShadeIsExpanded() {
-        statusBarStateController.expansionChanges.collect { isExpanded ->
+        statusBarStateController.expansionChanges.collectLatest { isExpanded ->
+            // Give keyguard events time to propagate, in case this expansion is part of the
+            // keyguard transition and not the user expanding the shade
+            yield()
             if (isExpanded) {
+                logger.logShadeExpanded()
                 unseenNotifications.clear()
             }
         }
@@ -155,6 +206,7 @@
             .forEach { unseenNotifications.remove(it) }
         headsUpManager.headsUpEvents.collect { (entry, isHun) ->
             if (isHun) {
+                logger.logUnseenHun(entry.key)
                 unseenNotifications.remove(entry)
             }
         }
@@ -196,6 +248,7 @@
                 if (
                     keyguardRepository.isKeyguardShowing() || !statusBarStateController.isExpanded
                 ) {
+                    logger.logUnseenAdded(entry.key)
                     unseenNotifications.add(entry)
                 }
             }
@@ -204,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)
+                }
             }
         }
 
@@ -237,6 +293,7 @@
                 }.also { hasFiltered -> hasFilteredAnyNotifs = hasFilteredAnyNotifs || hasFiltered }
 
             override fun onCleanup() {
+                logger.logProviderHasFilteredOutSeenNotifs(hasFilteredAnyNotifs)
                 seenNotifsProvider.hasFilteredOutSeenNotifications = hasFilteredAnyNotifs
                 hasFilteredAnyNotifs = false
             }
@@ -271,8 +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
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/init/NotificationsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt
index 8eef3f3..0ed4175 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt
@@ -20,7 +20,6 @@
 import com.android.systemui.ForegroundServiceNotificationListener
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
 import com.android.systemui.people.widget.PeopleSpaceWidgetManager
 import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption
 import com.android.systemui.statusbar.NotificationListener
@@ -117,9 +116,7 @@
         notificationLogger.setUpWithContainer(listContainer)
         peopleSpaceWidgetManager.attach(notificationListener)
         fgsNotifListener.init()
-        if (featureFlags.isEnabled(Flags.NOTIFICATION_MEMORY_MONITOR_ENABLED)) {
-            memoryMonitor.get().init()
-        }
+        memoryMonitor.get().init()
     }
 
     // TODO: Convert all functions below this line into listeners instead of public methods
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/interruption/NotificationInterruptStateProviderWrapper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderWrapper.kt
index f2216fc..ebba4b1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderWrapper.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderWrapper.kt
@@ -36,6 +36,8 @@
         SHOULD_INTERRUPT(shouldInterrupt = true),
         SHOULD_NOT_INTERRUPT(shouldInterrupt = false);
 
+        override val logReason = "unknown"
+
         companion object {
             fun of(booleanDecision: Boolean) =
                 if (booleanDecision) SHOULD_INTERRUPT else SHOULD_NOT_INTERRUPT
@@ -49,6 +51,7 @@
     ) : FullScreenIntentDecision {
         override val shouldInterrupt = originalDecision.shouldLaunch
         override val wouldInterruptWithoutDnd = originalDecision == NO_FSI_SUPPRESSED_ONLY_BY_DND
+        override val logReason = originalDecision.name
     }
 
     override fun addSuppressor(suppressor: NotificationInterruptSuppressor) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/VisualInterruptionDecisionProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/VisualInterruptionDecisionProvider.kt
index c0f4fcd..8024016 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/VisualInterruptionDecisionProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/VisualInterruptionDecisionProvider.kt
@@ -32,9 +32,12 @@
      * full-screen intent decisions.
      *
      * @property[shouldInterrupt] whether a visual interruption should be triggered
+     * @property[logReason] a log-friendly string explaining the reason for the decision; should be
+     *   used *only* for logging, not decision-making
      */
     interface Decision {
         val shouldInterrupt: Boolean
+        val logReason: String
     }
 
     /**
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 a9d1255..e468a59 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.
@@ -299,6 +298,16 @@
      */
     private boolean mShowGroupBackgroundWhenExpanded;
 
+    /**
+     * True if we always show the collapsed layout on lockscreen because vertical space is low.
+     */
+    private boolean mSaveSpaceOnLockscreen;
+
+    /**
+     * True if we use intrinsic height regardless of vertical space available on lockscreen.
+     */
+    private boolean mIgnoreLockscreenConstraints;
+
     private OnClickListener mExpandClickListener = new OnClickListener() {
         @Override
         public void onClick(View v) {
@@ -394,6 +403,14 @@
         return mGroupExpansionChanging;
     }
 
+    public void setSaveSpaceOnLockscreen(boolean saveSpace) {
+        mSaveSpaceOnLockscreen = saveSpace;
+    }
+
+    public boolean getSaveSpaceOnLockscreen() {
+        return mSaveSpaceOnLockscreen;
+    }
+
     public void setGroupExpansionChanging(boolean changing) {
         mGroupExpansionChanging = changing;
     }
@@ -419,15 +436,9 @@
      */
     public void setAnimationRunning(boolean running) {
         // Sets animations running in the private/public layouts.
-        if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_ANIMATE_BIG_PICTURE)) {
-            for (NotificationContentView l : mLayouts) {
-                if (l != null) {
-                    l.setContentAnimationRunning(running);
-                    setIconAnimationRunning(running, l);
-                }
-            }
-        } else {
-            for (NotificationContentView l : mLayouts) {
+        for (NotificationContentView l : mLayouts) {
+            if (l != null) {
+                l.setContentAnimationRunning(running);
                 setIconAnimationRunning(running, l);
             }
         }
@@ -957,15 +968,6 @@
     }
 
     @Override
-    protected boolean handleSlideBack() {
-        if (mMenuRow != null && mMenuRow.isMenuVisible()) {
-            animateResetTranslation();
-            return true;
-        }
-        return false;
-    }
-
-    @Override
     public boolean isSummaryWithChildren() {
         return mIsSummaryWithChildren;
     }
@@ -2553,11 +2555,18 @@
     }
 
     @Override
+    public int getHeightWithoutLockscreenConstraints() {
+        mIgnoreLockscreenConstraints = true;
+        final int height = getIntrinsicHeight();
+        mIgnoreLockscreenConstraints = false;
+        return height;
+    }
+
+    @Override
     public int getIntrinsicHeight() {
         if (isUserLocked()) {
             return getActualHeight();
-        }
-        if (mGuts != null && mGuts.isExposed()) {
+        } else if (mGuts != null && mGuts.isExposed()) {
             return mGuts.getIntrinsicHeight();
         } else if ((isChildInGroup() && !isGroupExpanded())) {
             return mPrivateLayout.getMinHeight();
@@ -2579,13 +2588,14 @@
             return getCollapsedHeight();
         }
     }
-
     /**
      * @return {@code true} if the notification can show it's heads up layout. This is mostly true
      * except for legacy use cases.
      */
     public boolean canShowHeadsUp() {
-        if (mOnKeyguard && !isDozing() && !isBypassEnabled() && !mEntry.isStickyAndNotDemoted()) {
+        if (mOnKeyguard && !isDozing() && !isBypassEnabled() &&
+                (!mEntry.isStickyAndNotDemoted()
+                        || (!mIgnoreLockscreenConstraints && mSaveSpaceOnLockscreen))) {
             return false;
         }
         return true;
@@ -3075,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();
@@ -3098,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);
@@ -3647,16 +3649,12 @@
             } else {
                 pw.println("no viewState!!!");
             }
-            pw.println("Roundness: " + getRoundableState().debugString());
+            pw.println(getRoundableState().debugString());
 
             int transientViewCount = mChildrenContainer == null
                     ? 0 : mChildrenContainer.getTransientViewCount();
             if (mIsSummaryWithChildren || transientViewCount > 0) {
-                pw.println();
-                pw.print("ChildrenContainer");
-                pw.print(" visibility: " + mChildrenContainer.getVisibility());
-                pw.print(", alpha: " + mChildrenContainer.getAlpha());
-                pw.print(", translationY: " + mChildrenContainer.getTranslationY());
+                pw.println(mChildrenContainer.debugString());
                 pw.println();
                 List<ExpandableNotificationRow> notificationChildren = getAttachedChildren();
                 pw.print("Children: " + notificationChildren.size() + " {");
@@ -3724,12 +3722,6 @@
     }
 
     @Override
-    public String toString() {
-        String roundableStateDebug = "RoundableState = " + getRoundableState().debugString();
-        return "ExpandableNotificationRow:" + hashCode() + " { " + roundableStateDebug + " }";
-    }
-
-    @Override
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
         if (mUseRoundnessSourceTypes) {
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/ExpandableOutlineView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java
index 197caa2..9aa50e9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableOutlineView.java
@@ -352,7 +352,7 @@
         IndentingPrintWriter pw = DumpUtilsKt.asIndenting(pwOriginal);
         super.dump(pw, args);
         DumpUtilsKt.withIncreasedIndent(pw, () -> {
-            pw.println("Roundness: " + getRoundableState().debugString());
+            pw.println(getRoundableState().debugString());
             if (DUMP_VERBOSE) {
                 pw.println("mCustomOutline: " + mCustomOutline + " mOutlineRect: " + mOutlineRect);
                 pw.println("mOutlineAlpha: " + mOutlineAlpha);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java
index 9df6ba9..5edff5f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java
@@ -291,6 +291,11 @@
             long duration) {
     }
 
+    public int getHeightWithoutLockscreenConstraints() {
+        // ExpandableNotificationRow overrides this.
+        return getHeight();
+    }
+
     /**
      * @return The desired notification height.
      */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java
index 49f17b6..6bbeebf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java
@@ -17,8 +17,6 @@
 package com.android.systemui.statusbar.notification.row;
 
 import android.annotation.ColorInt;
-import android.annotation.DrawableRes;
-import android.annotation.StringRes;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.content.res.Configuration;
@@ -50,8 +48,8 @@
 
     // Footer label
     private TextView mSeenNotifsFooterTextView;
-    private @StringRes int mSeenNotifsFilteredText;
-    private int mUnlockIconSize;
+    private String mSeenNotifsFilteredText;
+    private Drawable mSeenNotifsFilteredIcon;
 
     public FooterView(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -87,30 +85,12 @@
         mManageButton = findViewById(R.id.manage_text);
         mSeenNotifsFooterTextView = findViewById(R.id.unlock_prompt_footer);
         updateResources();
-        updateText();
+        updateContent();
         updateColors();
     }
 
-    public void setFooterLabelTextAndIcon(@StringRes int text, @DrawableRes int icon) {
-        mSeenNotifsFilteredText = text;
-        if (mSeenNotifsFilteredText != 0) {
-            mSeenNotifsFooterTextView.setText(mSeenNotifsFilteredText);
-        } else {
-            mSeenNotifsFooterTextView.setText(null);
-        }
-        Drawable drawable;
-        if (icon == 0) {
-            drawable = null;
-        } else {
-            drawable = getResources().getDrawable(icon);
-            drawable.setBounds(0, 0, mUnlockIconSize, mUnlockIconSize);
-        }
-        mSeenNotifsFooterTextView.setCompoundDrawablesRelative(drawable, null, null, null);
-        updateFooterVisibilityMode();
-    }
-
-    private void updateFooterVisibilityMode() {
-        if (mSeenNotifsFilteredText != 0) {
+    public void setFooterLabelVisible(boolean isVisible) {
+        if (isVisible) {
             mManageButton.setVisibility(View.GONE);
             mClearAllButton.setVisibility(View.GONE);
             mSeenNotifsFooterTextView.setVisibility(View.VISIBLE);
@@ -141,10 +121,10 @@
             return;
         }
         mShowHistory = showHistory;
-        updateText();
+        updateContent();
     }
 
-    private void updateText() {
+    private void updateContent() {
         if (mShowHistory) {
             mManageButton.setText(mManageNotificationHistoryText);
             mManageButton.setContentDescription(mManageNotificationHistoryText);
@@ -152,6 +132,9 @@
             mManageButton.setText(mManageNotificationText);
             mManageButton.setContentDescription(mManageNotificationText);
         }
+        mSeenNotifsFooterTextView.setText(mSeenNotifsFilteredText);
+        mSeenNotifsFooterTextView
+                .setCompoundDrawablesRelative(mSeenNotifsFilteredIcon, null, null, null);
     }
 
     public boolean isHistoryShown() {
@@ -166,7 +149,7 @@
         mClearAllButton.setContentDescription(
                 mContext.getString(R.string.accessibility_clear_all));
         updateResources();
-        updateText();
+        updateContent();
     }
 
     /**
@@ -190,8 +173,11 @@
         mManageNotificationText = getContext().getString(R.string.manage_notifications_text);
         mManageNotificationHistoryText = getContext()
                 .getString(R.string.manage_notifications_history_text);
-        mUnlockIconSize = getResources()
+        int unlockIconSize = getResources()
                 .getDimensionPixelSize(R.dimen.notifications_unseen_footer_icon_size);
+        mSeenNotifsFilteredText = getContext().getString(R.string.unlock_to_see_notif_text);
+        mSeenNotifsFilteredIcon = getContext().getDrawable(R.drawable.ic_friction_lock_closed);
+        mSeenNotifsFilteredIcon.setBounds(0, 0, unlockIconSize, unlockIconSize);
     }
 
     @Override
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 db550c0..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,7 +35,14 @@
 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>
+        get() = keyguardRepository.isKeyguardShowing
+
     /** Is the system in a state where the shelf is just a static display of notification icons? */
     val isShelfStatic: Flow<Boolean>
         get() =
@@ -41,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 bd531ca..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,11 +17,8 @@
 package com.android.systemui.statusbar.notification.shelf.ui.viewbinder
 
 import android.view.View
-import android.view.View.OnAttachStateChangeListener
-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
@@ -29,20 +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.SysuiStatusBarStateController
-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 kotlinx.coroutines.flow.launchIn
-import kotlinx.coroutines.flow.onEach
 import javax.inject.Inject
+import kotlinx.coroutines.awaitCancellation
+import kotlinx.coroutines.launch
 
 /**
  * Controller class for [NotificationShelf]. This implementation serves as a temporary wrapper
@@ -51,97 +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,
-    private val statusBarStateController: SysuiStatusBarStateController,
-) : NotificationShelfController {
+class NotificationShelfViewBinderWrapperControllerImpl @Inject constructor() :
+    NotificationShelfController {
 
     override val view: NotificationShelf
-        get() = shelf
-
-    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()
-        val onAttachStateListener =
-            object : OnAttachStateChangeListener {
-                override fun onViewAttachedToWindow(v: View) {
-                    statusBarStateController.addCallback(
-                        shelf,
-                        SysuiStatusBarStateController.RANK_SHELF,
-                    )
-                }
-
-                override fun onViewDetachedFromWindow(v: View) {
-                    statusBarStateController.removeCallback(shelf)
-                }
-            }
-        shelf.addOnAttachStateChangeListener(onAttachStateListener)
-        if (shelf.isAttachedToWindow) {
-            onAttachStateListener.onViewAttachedToWindow(shelf)
-        }
-    }
+        get() = unsupported
 
     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,
-    ) {
-        shelf.bind(ambientState, notificationStackScrollLayoutController)
-    }
+    ) = unsupported
 
-    override fun setOnClickListener(listener: View.OnClickListener) {
-        shelf.setOnClickListener(listener)
-    }
+    override fun setOnClickListener(listener: View.OnClickListener) = unsupported
 
     private val unsupported: Nothing
-        get() = error("Code path not supported when Flags.NOTIFICATION_SHELF_REFACTOR is enabled")
+        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)
+    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 b84834a..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,8 +30,18 @@
 @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
+
     /** 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/AnimationProperties.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java
index 112d48c..00b9aa4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java
@@ -32,6 +32,7 @@
     public long duration;
     public long delay;
     private ArrayMap<Property, Interpolator> mInterpolatorMap;
+    private Consumer<Property> mAnimationCancelAction;
     private Consumer<Property> mAnimationEndAction;
 
     /**
@@ -50,27 +51,43 @@
      * @return a listener that will be added for a given property during its animation.
      */
     public AnimatorListenerAdapter getAnimationFinishListener(Property property) {
-        if (mAnimationEndAction == null) {
+        if (mAnimationEndAction == null && mAnimationCancelAction == null) {
             return null;
         }
+        Consumer<Property> cancelAction = mAnimationCancelAction;
         Consumer<Property> endAction = mAnimationEndAction;
         return new AnimatorListenerAdapter() {
             private boolean mCancelled;
 
             @Override
             public void onAnimationCancel(Animator animation) {
-                 mCancelled = true;
+                mCancelled = true;
+                if (cancelAction != null) {
+                    cancelAction.accept(property);
+                }
             }
 
             @Override
             public void onAnimationEnd(Animator animation) {
-                if (!mCancelled) {
+                if (!mCancelled && endAction != null) {
                     endAction.accept(property);
                 }
             }
         };
     }
 
+    /**
+     * Add a callback for animation cancellation.
+     */
+    public AnimationProperties setAnimationCancelAction(Consumer<Property> listener) {
+        mAnimationCancelAction = listener;
+        return this;
+    }
+
+    /**
+     * Add a callback for animation ending successfully. The callback will not be called when the
+     * animations is cancelled.
+     */
     public AnimationProperties setAnimationEndAction(Consumer<Property> listener) {
         mAnimationEndAction = listener;
         return this;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
index 40f55bd..160a230 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
@@ -1546,9 +1546,11 @@
         mUseRoundnessSourceTypes = enabled;
     }
 
-    @Override
-    public String toString() {
-        String roundableStateDebug = "RoundableState = " + getRoundableState().debugString();
-        return "NotificationChildrenContainer:" + hashCode() + " { " + roundableStateDebug + " }";
+    public String debugString() {
+        return TAG + " { "
+                + "visibility: " + getVisibility()
+                + ", alpha: " + getAlpha()
+                + ", translationY: " + getTranslationY()
+                + ", roundableState: " + getRoundableState().debugString() + "}";
     }
 }
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 e47e414..5c322d7 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();
@@ -4759,13 +4746,7 @@
         mFooterView.setVisible(visible, animate);
         mFooterView.setSecondaryVisible(showDismissView, animate);
         mFooterView.showHistory(showHistory);
-        if (mHasFilteredOutSeenNotifications) {
-            mFooterView.setFooterLabelTextAndIcon(
-                    R.string.unlock_to_see_notif_text,
-                    R.drawable.ic_friction_lock_closed);
-        } else {
-            mFooterView.setFooterLabelTextAndIcon(0, 0);
-        }
+        mFooterView.setFooterLabelVisible(mHasFilteredOutSeenNotifications);
     }
 
     @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
@@ -5137,8 +5118,35 @@
         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())) {
+            return;
+        }
+        int index = -1;
+        if (mShelf != null) {
+            index = indexOfChild(mShelf);
+            removeView(mShelf);
+        }
+        mShelf = shelf;
+        addView(mShelf, index);
+        mAmbientState.setShelf(mShelf);
+        mStateAnimator.setShelf(mShelf);
+        shelf.bind(mAmbientState, this, mController.getNotificationRoundnessManager());
+    }
+
     @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
     public void setShelfController(NotificationShelfController notificationShelfController) {
+        NotificationShelfController.assertRefactorFlagDisabled(mAmbientState.getFeatureFlags());
         int index = -1;
         if (mShelf != null) {
             index = indexOfChild(mShelf);
@@ -5218,7 +5226,6 @@
     void onStatePostChange(boolean fromShadeLocked) {
         boolean onKeyguard = onKeyguard();
 
-        mAmbientState.setActivatedChild(null);
         mAmbientState.setDimmed(onKeyguard);
 
         if (mHeadsUpAppearanceController != null) {
@@ -5227,11 +5234,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 792746c..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
@@ -73,6 +73,7 @@
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager.UserChangedListener;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.NotificationShelf;
 import com.android.systemui.statusbar.NotificationShelfController;
 import com.android.systemui.statusbar.RemoteInputController;
 import com.android.systemui.statusbar.StatusBarState;
@@ -104,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;
@@ -121,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}.
  */
@@ -150,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;
@@ -174,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;
@@ -547,7 +555,7 @@
                 public boolean updateSwipeProgress(View animView, boolean dismissable,
                                                    float swipeProgress) {
                     // Returning true prevents alpha fading.
-                    return !mFadeNotificationsOnDismiss;
+                    return false;
                 }
 
                 @Override
@@ -627,6 +635,7 @@
 
     @Inject
     public NotificationStackScrollLayoutController(
+            NotificationStackScrollLayout view,
             @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) boolean allowLongPress,
             NotificationGutsManager notificationGutsManager,
             NotificationVisibilityProvider visibilityProvider,
@@ -641,6 +650,7 @@
             KeyguardBypassController keyguardBypassController,
             ZenModeController zenModeController,
             NotificationLockscreenUserManager lockscreenUserManager,
+            Optional<NotificationListViewModel> nsslViewModel,
             MetricsLogger metricsLogger,
             DumpManager dumpManager,
             FalsingCollector falsingCollector,
@@ -664,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;
@@ -684,6 +696,7 @@
         mKeyguardBypassController = keyguardBypassController;
         mZenModeController = zenModeController;
         mLockscreenUserManager = lockscreenUserManager;
+        mViewModel = nsslViewModel;
         mMetricsLogger = metricsLogger;
         mDumpManager = dumpManager;
         mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
@@ -705,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);
@@ -772,7 +786,6 @@
 
         mLockscreenUserManager.addUserChangedListener(mLockscreenUserChangeListener);
 
-        mFadeNotificationsOnDismiss = mFeatureFlags.isEnabled(Flags.NOTIFICATION_DISMISSAL_FADE);
         if (!mUseRoundnessSourceTypes) {
             mNotificationRoundnessManager.setOnRoundingChangedCallback(mView::invalidate);
             mView.addOnExpandedHeightChangedListener(mNotificationRoundnessManager::setExpanded);
@@ -819,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) {
@@ -1236,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());
 
@@ -1369,19 +1387,12 @@
         mView.onUpdateRowStates();
     }
 
-    public ActivatableNotificationView getActivatedChild() {
-        return mView.getActivatedChild();
-    }
-
-    public void setActivatedChild(ActivatableNotificationView view) {
-        mView.setActivatedChild(view);
-    }
-
     public void runAfterAnimationFinished(Runnable r) {
         mView.runAfterAnimationFinished(r);
     }
 
     public void setShelfController(NotificationShelfController notificationShelfController) {
+        NotificationShelfController.assertRefactorFlagDisabled(mFeatureFlags);
         mView.setShelfController(notificationShelfController);
     }
 
@@ -1593,6 +1604,19 @@
         mView.setOnNotificationRemovedListener(listener);
     }
 
+    public void setShelf(NotificationShelf shelf) {
+        if (!NotificationShelfController.checkRefactorFlagEnabled(mFeatureFlags)) return;
+        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
      */
@@ -1935,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/NotificationStackSizeCalculator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt
index 0922428..c7cb70c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculator.kt
@@ -23,12 +23,14 @@
 import com.android.systemui.R
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.media.controls.pipeline.MediaDataManager
 import com.android.systemui.statusbar.LockscreenShadeTransitionController
 import com.android.systemui.statusbar.StatusBarState.KEYGUARD
 import com.android.systemui.statusbar.SysuiStatusBarStateController
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
 import com.android.systemui.statusbar.notification.row.ExpandableView
 import com.android.systemui.util.Compile
+import com.android.systemui.util.LargeScreenUtils.shouldUseSplitNotificationShade
 import com.android.systemui.util.children
 import java.io.PrintWriter
 import javax.inject.Inject
@@ -51,11 +53,10 @@
 constructor(
     private val statusBarStateController: SysuiStatusBarStateController,
     private val lockscreenShadeTransitionController: LockscreenShadeTransitionController,
+    private val mediaDataManager: MediaDataManager,
     @Main private val resources: Resources
 ) {
 
-    private lateinit var lastComputeHeightLog : String
-
     /**
      * Maximum # notifications to show on Keyguard; extras will be collapsed in an overflow shelf.
      * If there are exactly 1 + mMaxKeyguardNotifications, and they fit in the available space
@@ -67,68 +68,158 @@
     /** Minimum space between two notifications, see [calculateGapAndDividerHeight]. */
     private var dividerHeight by notNull<Float>()
 
+    /**
+     * True when there is not enough vertical space to show at least one notification with heads up
+     * layout. When true, notifications always show collapsed layout.
+     */
+    private var saveSpaceOnLockscreen = false
+
     init {
         updateResources()
     }
 
     /**
      * Returns whether notifications and (shelf if visible) can fit in total space available.
-     * [spaceForShelf] is extra vertical space allowed for the shelf to overlap the lock icon.
+     * [shelfSpace] is extra vertical space allowed for the shelf to overlap the lock icon.
      */
     private fun canStackFitInSpace(
         stackHeight: StackHeight,
-        spaceForNotifications: Float,
-        spaceForShelf: Float,
-    ): Boolean {
-
-        val (notificationsHeight, shelfHeightWithSpaceBefore) = stackHeight
-        var canFit: Boolean
+        notifSpace: Float,
+        shelfSpace: Float,
+    ): FitResult {
+        val (notifHeight, notifHeightSaveSpace, shelfHeightWithSpaceBefore) = stackHeight
 
         if (shelfHeightWithSpaceBefore == 0f) {
-            canFit = notificationsHeight <= spaceForNotifications
-            log {
-                "canStackFitInSpace[$canFit] = notificationsHeight[$notificationsHeight]" +
-                    " <= spaceForNotifications[$spaceForNotifications]"
+            if (notifHeight <= notifSpace) {
+                log {
+                    "\tcanStackFitInSpace[FIT] = notifHeight[$notifHeight]" +
+                        " <= notifSpace[$notifSpace]"
+                }
+                return FitResult.FIT
             }
-        } else {
-            canFit =
-                (notificationsHeight + shelfHeightWithSpaceBefore) <=
-                    (spaceForNotifications + spaceForShelf)
+            if (notifHeightSaveSpace <= notifSpace) {
+                log {
+                    "\tcanStackFitInSpace[FIT_IF_SAVE_SPACE]" +
+                        " = notifHeightSaveSpace[$notifHeightSaveSpace]" +
+                        " <= notifSpace[$notifSpace]"
+                }
+                return FitResult.FIT_IF_SAVE_SPACE
+            }
             log {
-                "canStackFitInSpace[$canFit] = (notificationsHeight[$notificationsHeight]" +
-                    " + shelfHeightWithSpaceBefore[$shelfHeightWithSpaceBefore])" +
-                    " <= (spaceForNotifications[$spaceForNotifications] " +
-                    " + spaceForShelf[$spaceForShelf])"
+                "\tcanStackFitInSpace[NO_FIT]" +
+                    " = notifHeightSaveSpace[$notifHeightSaveSpace] > notifSpace[$notifSpace]"
+            }
+            return FitResult.NO_FIT
+        } else {
+            if ((notifHeight + shelfHeightWithSpaceBefore) <= (notifSpace + shelfSpace)) {
+                log {
+                    "\tcanStackFitInSpace[FIT] = (notifHeight[$notifHeight]" +
+                        " + shelfHeightWithSpaceBefore[$shelfHeightWithSpaceBefore])" +
+                        " <= (notifSpace[$notifSpace] " +
+                        " + spaceForShelf[$shelfSpace])"
+                }
+                return FitResult.FIT
+            } else if (
+                (notifHeightSaveSpace + shelfHeightWithSpaceBefore) <= (notifSpace + shelfSpace)
+            ) {
+                log {
+                    "\tcanStackFitInSpace[FIT_IF_SAVE_SPACE]" +
+                        " = (notifHeightSaveSpace[$notifHeightSaveSpace]" +
+                        " + shelfHeightWithSpaceBefore[$shelfHeightWithSpaceBefore])" +
+                        " <= (notifSpace[$notifSpace] + shelfSpace[$shelfSpace])"
+                }
+                return FitResult.FIT_IF_SAVE_SPACE
+            } else {
+                log {
+                    "\tcanStackFitInSpace[NO_FIT]" +
+                        " = (notifHeightSaveSpace[$notifHeightSaveSpace]" +
+                        " + shelfHeightWithSpaceBefore[$shelfHeightWithSpaceBefore])" +
+                        " > (notifSpace[$notifSpace] + shelfSpace[$shelfSpace])"
+                }
+                return FitResult.NO_FIT
             }
         }
-        return canFit
     }
 
     /**
-     * Given the [spaceForNotifications] and [spaceForShelf] constraints, calculate how many
-     * notifications to show. This number is only valid in keyguard.
+     * Given the [notifSpace] and [shelfSpace] constraints, calculate how many notifications to
+     * show. This number is only valid in keyguard.
      *
      * @param totalAvailableSpace space for notifications. This includes the space for the shelf.
      */
     fun computeMaxKeyguardNotifications(
         stack: NotificationStackScrollLayout,
-        spaceForNotifications: Float,
-        spaceForShelf: Float,
-        shelfIntrinsicHeight: Float
+        notifSpace: Float,
+        shelfSpace: Float,
+        shelfHeight: Float,
     ): Int {
+        log { "\n " }
+        log {
+            "computeMaxKeyguardNotifications ---" +
+                "\n\tnotifSpace $notifSpace" +
+                "\n\tspaceForShelf $shelfSpace" +
+                "\n\tshelfIntrinsicHeight $shelfHeight"
+        }
+        if (notifSpace + shelfSpace <= 0f) {
+            log { "--- No space to show anything. maxNotifs=0" }
+            return 0
+        }
         log { "\n" }
 
-        val stackHeightSequence = computeHeightPerNotificationLimit(stack, shelfIntrinsicHeight,
-            /* computeHeight= */ false)
+        val stackHeightSequence = computeHeightPerNotificationLimit(stack, shelfHeight)
+        val isMediaShowing = mediaDataManager.hasActiveMediaOrRecommendation()
 
-        var maxNotifications =
+        log { "\tGet maxNotifWithoutSavingSpace ---" }
+        val maxNotifWithoutSavingSpace =
             stackHeightSequence.lastIndexWhile { heightResult ->
                 canStackFitInSpace(
                     heightResult,
-                    spaceForNotifications = spaceForNotifications,
-                    spaceForShelf = spaceForShelf)
+                    notifSpace = notifSpace,
+                    shelfSpace = shelfSpace
+                ) == FitResult.FIT
             }
 
+        // How many notifications we can show at heightWithoutLockscreenConstraints
+        var minCountAtHeightWithoutConstraints =
+            if (isMediaShowing && !shouldUseSplitNotificationShade(resources)) 2 else 1
+        log {
+            "\t---maxNotifWithoutSavingSpace=$maxNotifWithoutSavingSpace " +
+                "isMediaShowing=$isMediaShowing" +
+                "minCountAtHeightWithoutConstraints=$minCountAtHeightWithoutConstraints"
+        }
+        log { "\n" }
+
+        var maxNotifications: Int
+        if (maxNotifWithoutSavingSpace >= minCountAtHeightWithoutConstraints) {
+            saveSpaceOnLockscreen = false
+            maxNotifications = maxNotifWithoutSavingSpace
+            log {
+                "\tDo NOT save space. maxNotifications=maxNotifWithoutSavingSpace=$maxNotifications"
+            }
+        } else {
+            log { "\tSAVE space ---" }
+            saveSpaceOnLockscreen = true
+            maxNotifications =
+                stackHeightSequence.lastIndexWhile { heightResult ->
+                    canStackFitInSpace(
+                        heightResult,
+                        notifSpace = notifSpace,
+                        shelfSpace = shelfSpace
+                    ) != FitResult.NO_FIT
+                }
+            log { "\t--- maxNotifications=$maxNotifications" }
+        }
+
+        // Must update views immediately to avoid mismatches between initial HUN layout height
+        // and the height adapted to lockscreen space constraints, which causes jump cuts.
+        stack.showableChildren().toList().forEach { currentNotification ->
+            run {
+                if (currentNotification is ExpandableNotificationRow) {
+                    currentNotification.saveSpaceOnLockscreen = saveSpaceOnLockscreen
+                }
+            }
+        }
+
         if (onLockscreen()) {
             maxNotifications = min(maxKeyguardNotifications, maxNotifications)
         }
@@ -137,53 +228,80 @@
         maxNotifications = max(0, maxNotifications)
         log {
             val sequence = if (SPEW) " stackHeightSequence=${stackHeightSequence.toList()}" else ""
-            "computeMaxKeyguardNotifications(" +
-                " spaceForNotifications=$spaceForNotifications" +
-                " spaceForShelf=$spaceForShelf" +
-                " shelfHeight=$shelfIntrinsicHeight) -> $maxNotifications$sequence"
+            "--- computeMaxKeyguardNotifications(" +
+                " notifSpace=$notifSpace" +
+                " shelfSpace=$shelfSpace" +
+                " shelfHeight=$shelfHeight) -> $maxNotifications$sequence"
         }
+        log { "\n" }
         return maxNotifications
     }
 
     /**
-     * Given the [maxNotifications] constraint, calculates the height of the
+     * Given the [maxNotifs] constraint, calculates the height of the
      * [NotificationStackScrollLayout]. This might or might not be in keyguard.
      *
      * @param stack stack containing notifications as children.
-     * @param maxNotifications Maximum number of notifications. When reached, the others will go
-     * into the shelf.
-     * @param shelfIntrinsicHeight height of the shelf, without any padding. It might be zero.
-     *
+     * @param maxNotifs Maximum number of notifications. When reached, the others will go into the
+     *   shelf.
+     * @param shelfHeight height of the shelf, without any padding. It might be zero.
      * @return height of the stack, including shelf height, if needed.
      */
     fun computeHeight(
         stack: NotificationStackScrollLayout,
-        maxNotifications: Int,
-        shelfIntrinsicHeight: Float
+        maxNotifs: Int,
+        shelfHeight: Float
     ): Float {
         log { "\n" }
-        lastComputeHeightLog = ""
-        val heightPerMaxNotifications =
-            computeHeightPerNotificationLimit(stack, shelfIntrinsicHeight,
-                    /* computeHeight= */ true)
+        log { "computeHeight ---" }
 
-        val (notificationsHeight, shelfHeightWithSpaceBefore) =
-            heightPerMaxNotifications.elementAtOrElse(maxNotifications) {
-                heightPerMaxNotifications.last() // Height with all notifications visible.
+        val stackHeightSequence = computeHeightPerNotificationLimit(stack, shelfHeight)
+
+        val (notifsHeight, notifsHeightSavingSpace, shelfHeightWithSpaceBefore) =
+            stackHeightSequence.elementAtOrElse(maxNotifs) {
+                stackHeightSequence.last() // Height with all notifications visible.
             }
-        lastComputeHeightLog += "\ncomputeHeight(maxNotifications=$maxNotifications," +
-                "shelfIntrinsicHeight=$shelfIntrinsicHeight) -> " +
-                "${notificationsHeight + shelfHeightWithSpaceBefore}" +
-                " = ($notificationsHeight + $shelfHeightWithSpaceBefore)"
-        log {
-            lastComputeHeightLog
+
+        var height: Float
+        if (saveSpaceOnLockscreen) {
+            height = notifsHeightSavingSpace + shelfHeightWithSpaceBefore
+            log {
+                "--- computeHeight(maxNotifs=$maxNotifs, shelfHeight=$shelfHeight)" +
+                    " -> $height=($notifsHeightSavingSpace+$shelfHeightWithSpaceBefore)," +
+                    " | saveSpaceOnLockscreen=$saveSpaceOnLockscreen"
+            }
+        } else {
+            height = notifsHeight + shelfHeightWithSpaceBefore
+            log {
+                "--- computeHeight(maxNotifs=$maxNotifs, shelfHeight=$shelfHeight)" +
+                    " -> ${height}=($notifsHeight+$shelfHeightWithSpaceBefore)" +
+                    " | saveSpaceOnLockscreen=$saveSpaceOnLockscreen"
+            }
         }
-        return notificationsHeight + shelfHeightWithSpaceBefore
+        return height
     }
 
+    private enum class FitResult {
+        FIT,
+        FIT_IF_SAVE_SPACE,
+        NO_FIT
+    }
+
+    data class SpaceNeeded(
+        // Float height of spaceNeeded when showing heads up layout for FSI HUNs.
+        val whenEnoughSpace: Float,
+
+        // Float height of space needed when showing collapsed layout for FSI HUNs.
+        val whenSavingSpace: Float
+    )
+
     private data class StackHeight(
         // Float height with ith max notifications (not including shelf)
-        val notificationsHeight: Float,
+        val notifsHeight: Float,
+
+        // Float height with ith max notifications
+        // (not including shelf, using collapsed layout for FSI HUN)
+        val notifsHeightSavingSpace: Float,
 
         // Float height of shelf (0 if shelf is not showing), and space before the shelf that
         // changes during the lockscreen <=> full shade transition.
@@ -193,20 +311,27 @@
     private fun computeHeightPerNotificationLimit(
         stack: NotificationStackScrollLayout,
         shelfHeight: Float,
-        computeHeight: Boolean
     ): Sequence<StackHeight> = sequence {
-        log { "computeHeightPerNotificationLimit" }
-
         val children = stack.showableChildren().toList()
         var notifications = 0f
+        var notifsWithCollapsedHun = 0f
         var previous: ExpandableView? = null
         val onLockscreen = onLockscreen()
 
         // Only shelf. This should never happen, since we allow 1 view minimum (EmptyViewState).
-        yield(StackHeight(notificationsHeight = 0f, shelfHeightWithSpaceBefore = shelfHeight))
+        yield(
+            StackHeight(
+                notifsHeight = 0f,
+                notifsHeightSavingSpace = 0f,
+                shelfHeightWithSpaceBefore = shelfHeight
+            )
+        )
 
         children.forEachIndexed { i, currentNotification ->
-            notifications += spaceNeeded(currentNotification, i, previous, stack, onLockscreen)
+            val space = getSpaceNeeded(currentNotification, i, previous, stack, onLockscreen)
+            notifications += space.whenEnoughSpace
+            notifsWithCollapsedHun += space.whenSavingSpace
+
             previous = currentNotification
 
             val shelfWithSpaceBefore =
@@ -219,22 +344,23 @@
                             stack,
                             previous = currentNotification,
                             current = children[firstViewInShelfIndex],
-                            currentIndex = firstViewInShelfIndex)
+                            currentIndex = firstViewInShelfIndex
+                        )
                     spaceBeforeShelf + shelfHeight
                 }
 
-            val currentLog = "computeHeight | i=$i notificationsHeight=$notifications " +
-                "shelfHeightWithSpaceBefore=$shelfWithSpaceBefore"
-            if (computeHeight) {
-                lastComputeHeightLog += "\n" + currentLog
-            }
             log {
-                currentLog
+                "\tcomputeHeightPerNotificationLimit i=$i notifs=$notifications " +
+                    "notifsHeightSavingSpace=$notifsWithCollapsedHun" +
+                    " shelfWithSpaceBefore=$shelfWithSpaceBefore"
             }
             yield(
                 StackHeight(
-                    notificationsHeight = notifications,
-                    shelfHeightWithSpaceBefore = shelfWithSpaceBefore))
+                    notifsHeight = notifications,
+                    notifsHeightSavingSpace = notifsWithCollapsedHun,
+                    shelfHeightWithSpaceBefore = shelfWithSpaceBefore
+                )
+            )
         }
     }
 
@@ -256,32 +382,46 @@
     }
 
     @VisibleForTesting
-    fun spaceNeeded(
+    fun getSpaceNeeded(
         view: ExpandableView,
         visibleIndex: Int,
         previousView: ExpandableView?,
         stack: NotificationStackScrollLayout,
-        onLockscreen: Boolean
-    ): Float {
+        onLockscreen: Boolean,
+    ): SpaceNeeded {
         assert(view.isShowable(onLockscreen))
 
+        // Must use heightWithoutLockscreenConstraints because intrinsicHeight references
+        // mSaveSpaceOnLockscreen and using intrinsicHeight here will result in stack overflow.
+        val height = view.heightWithoutLockscreenConstraints.toFloat()
+        val gapAndDividerHeight =
+            calculateGapAndDividerHeight(stack, previousView, current = view, visibleIndex)
+
         var size =
             if (onLockscreen) {
                 if (view is ExpandableNotificationRow && view.entry.isStickyAndNotDemoted) {
-                    view.intrinsicHeight.toFloat()
+                    height
                 } else {
                     view.getMinHeight(/* ignoreTemporaryStates= */ true).toFloat()
                 }
             } else {
-                view.intrinsicHeight.toFloat()
+                height
             }
+        size += gapAndDividerHeight
 
-        size += calculateGapAndDividerHeight(stack, previousView, current = view, visibleIndex)
-        return size
+        var sizeWhenSavingSpace =
+            if (onLockscreen) {
+                view.getMinHeight(/* ignoreTemporaryStates= */ true).toFloat()
+            } else {
+                height
+            }
+        sizeWhenSavingSpace += gapAndDividerHeight
+
+        return SpaceNeeded(size, sizeWhenSavingSpace)
     }
 
     fun dump(pw: PrintWriter, args: Array<out String>) {
-        pw.println("NotificationStackSizeCalculator lastComputeHeightLog = $lastComputeHeightLog")
+        pw.println("NotificationStackSizeCalculator saveSpaceOnLockscreen=$saveSpaceOnLockscreen")
     }
 
     private fun ExpandableView.isShowable(onLockscreen: Boolean): Boolean {
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 7596ce0..5654772 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;
@@ -449,14 +452,15 @@
     protected PhoneStatusBarView mStatusBarView;
     private PhoneStatusBarViewController mPhoneStatusBarViewController;
     private PhoneStatusBarTransitions mStatusBarTransitions;
-    private AuthRippleController mAuthRippleController;
+    private final 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
     DozeServiceHost mDozeServiceHost;
-    private LightRevealScrim mLightRevealScrim;
+    private final LightRevealScrim mLightRevealScrim;
     private PowerButtonReveal mPowerButtonReveal;
 
     private boolean mWakeUpComingFromTouch;
@@ -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,
@@ -763,6 +768,7 @@
             ScrimController scrimController,
             Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
             Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
+            AuthRippleController authRippleController,
             DozeServiceHost dozeServiceHost,
             PowerManager powerManager,
             ScreenPinningRequest screenPinningRequest,
@@ -805,6 +811,7 @@
             IDreamManager dreamManager,
             Lazy<CameraLauncher> cameraLauncherLazy,
             Lazy<LightRevealScrimViewModel> lightRevealScrimViewModelLazy,
+            LightRevealScrim lightRevealScrim,
             AlternateBouncerInteractor alternateBouncerInteractor,
             UserTracker userTracker,
             Provider<FingerprintManager> fingerprintManager
@@ -814,6 +821,7 @@
         mFragmentService = fragmentService;
         mLightBarController = lightBarController;
         mAutoHideController = autoHideController;
+        mStatusBarInitializer = statusBarInitializer;
         mStatusBarWindowController = statusBarWindowController;
         mKeyguardUpdateMonitor = keyguardUpdateMonitor;
         mPulseExpansionHandler = pulseExpansionHandler;
@@ -860,6 +868,7 @@
         mScreenPinningRequest = screenPinningRequest;
         mDozeScrimController = dozeScrimController;
         mBiometricUnlockControllerLazy = biometricUnlockControllerLazy;
+        mAuthRippleController = authRippleController;
         mNotificationShadeDepthControllerLazy = notificationShadeDepthControllerLazy;
         mVolumeComponent = volumeComponent;
         mCommandQueue = commandQueue;
@@ -926,6 +935,7 @@
         wiredChargingRippleController.registerCallbacks();
 
         mLightRevealScrimViewModelLazy = lightRevealScrimViewModelLazy;
+        mLightRevealScrim = lightRevealScrim;
 
         // Based on teamfood flag, turn predictive back dispatch on at runtime.
         if (mFeatureFlags.isEnabled(Flags.WM_ENABLE_PREDICTIVE_BACK_SYSUI)) {
@@ -951,11 +961,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 +1095,7 @@
                 this,
                 mStatusBarKeyguardViewManager,
                 mNotificationShadeWindowViewController,
-                mNotificationPanelViewController,
+                mShadeSurface,
                 mAmbientIndicationContainer);
         updateLightRevealScrimVisibility();
 
@@ -1253,7 +1258,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 +1268,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 +1280,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);
 
@@ -1323,8 +1330,6 @@
         });
         mScrimController.attachViews(scrimBehind, notificationsScrim, scrimInFront);
 
-        mLightRevealScrim = mNotificationShadeWindowView.findViewById(R.id.light_reveal_scrim);
-
         if (mFeatureFlags.isEnabled(Flags.LIGHT_REVEAL_MIGRATION)) {
             LightRevealScrimViewBinder.bind(
                     mLightRevealScrim, mLightRevealScrimViewModelLazy.get());
@@ -1349,7 +1354,7 @@
         mScreenOffAnimationController.initialize(this, mLightRevealScrim);
         updateLightRevealScrimVisibility();
 
-        mNotificationPanelViewController.initDependencies(
+        mShadeSurface.initDependencies(
                 this,
                 mGestureRec,
                 mShadeController::makeExpandedInvisible,
@@ -1357,8 +1362,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 +1396,7 @@
                             .build());
             mBrightnessMirrorController = new BrightnessMirrorController(
                     mNotificationShadeWindowView,
-                    mNotificationPanelViewController,
+                    mShadeSurface,
                     mNotificationShadeDepthControllerLazy.get(),
                     mBrightnessSliderFactory,
                     (visible) -> {
@@ -1486,7 +1496,7 @@
                 || !mKeyguardStateController.canDismissLockScreen()
                 || mKeyguardViewMediator.isAnySimPinSecure()
                 || (mQsController.getExpanded() && trackingTouch)
-                || mNotificationPanelViewController.getBarState() == StatusBarState.SHADE_LOCKED) {
+                || mShadeSurface.getBarState() == StatusBarState.SHADE_LOCKED) {
             return;
         }
 
@@ -1506,14 +1516,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 +1532,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 +1578,6 @@
                 mNotifListContainer,
                 mHeadsUpManager,
                 mJankMonitor);
-        mNotificationShelfController.setOnActivatedListener(mPresenter);
         mRemoteInputManager.addControllerCallback(mNotificationShadeWindowController);
         mStackScrollerController.setNotificationActivityStarter(mNotificationActivityStarter);
         mGutsManager.setNotificationActivityStarter(mNotificationActivityStarter);
@@ -1590,12 +1604,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 +1643,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();
@@ -1652,8 +1669,6 @@
         mPresenter = mCentralSurfacesComponent.getNotificationPresenter();
         mNotificationActivityStarter = mCentralSurfacesComponent.getNotificationActivityStarter();
         mNotificationShelfController = mCentralSurfacesComponent.getNotificationShelfController();
-        mAuthRippleController = mCentralSurfacesComponent.getAuthRippleController();
-        mAuthRippleController.init();
 
         mHeadsUpManager.addListener(mCentralSurfacesComponent.getStatusBarHeadsUpChangeListener());
 
@@ -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() {
@@ -2614,6 +2642,7 @@
                 }
                 mRemoteInputManager.closeRemoteInputs();
                 if (mLockscreenUserManager.isCurrentProfile(getSendingUserId())) {
+                    mShadeLogger.d("ACTION_CLOSE_SYSTEM_DIALOGS intent: closing shade");
                     int flags = CommandQueue.FLAG_EXCLUDE_NONE;
                     if (reason != null) {
                         if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
@@ -2628,6 +2657,8 @@
                         }
                     }
                     mShadeController.animateCollapseShade(flags);
+                } else {
+                    mShadeLogger.d("ACTION_CLOSE_SYSTEM_DIALOGS intent: non-matching user ID");
                 }
             } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                 if (mNotificationShadeWindowController != null) {
@@ -2674,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()
@@ -2686,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()) {
@@ -2694,7 +2731,9 @@
             }
             action.onDismiss();
         }
+
     }
+
     /**
      * Notify the shade controller that the current user changed
      *
@@ -2702,7 +2741,7 @@
      */
     @Override
     public void setLockscreenUser(int newUserId) {
-        if (mLockscreenWallpaper != null) {
+        if (mLockscreenWallpaper != null && !mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
             mLockscreenWallpaper.setCurrentUser(newUserId);
         }
         mScrimController.setCurrentUser(newUserId);
@@ -2728,8 +2767,8 @@
             mStatusBarWindowController.refreshStatusBarHeight();
         }
 
-        if (mNotificationPanelViewController != null) {
-            mNotificationPanelViewController.updateResources();
+        if (mShadeSurface != null) {
+            mShadeSurface.updateResources();
         }
         if (mBrightnessMirrorController != null) {
             mBrightnessMirrorController.updateResources();
@@ -2899,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 */,
@@ -2907,7 +2954,7 @@
                                 null /* callback */,
                                 0 /* flags */,
                                 animationController,
-                                getActivityUserHandle(intent)),
+                                getActivityUserHandle(intent), customMessage),
                 delay);
     }
 
@@ -2979,7 +3026,7 @@
     public void showKeyguardImpl() {
         Trace.beginSection("CentralSurfaces#showKeyguard");
         if (mKeyguardStateController.isLaunchTransitionFadingAway()) {
-            mNotificationPanelViewController.cancelAnimation();
+            mShadeSurface.cancelAnimation();
             onLaunchTransitionFadingEnded();
         }
         mMessageRouter.cancelMessages(MSG_LAUNCH_TRANSITION_TIMEOUT);
@@ -2998,7 +3045,7 @@
     }
 
     private void onLaunchTransitionFadingEnded() {
-        mNotificationPanelViewController.resetAlpha();
+        mShadeSurface.resetAlpha();
         mCameraLauncherLazy.get().setLaunchingAffordance(false);
         releaseGestureWakeLock();
         runLaunchTransitionEndRunnable();
@@ -3028,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(),
@@ -3061,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() {
@@ -3101,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();
         }
 
@@ -3113,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();
@@ -3217,7 +3264,7 @@
         boolean animate = (!mDozing && shouldAnimateDozeWakeup())
                 || (mDozing && mDozeParameters.shouldControlScreenOff() && keyguardVisibleOrWillBe);
 
-        mNotificationPanelViewController.setDozing(mDozing, animate);
+        mShadeSurface.setDozing(mDozing, animate);
         updateQsExpansionEnabled();
         Trace.endSection();
     }
@@ -3297,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;
@@ -3449,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();
@@ -3482,8 +3529,8 @@
         if (mPhoneStatusBarViewController != null) {
             mPhoneStatusBarViewController.setImportantForAccessibility(importance);
         }
-        mNotificationPanelViewController.setImportantForAccessibility(importance);
-        mNotificationPanelViewController.setBouncerShowing(bouncerShowing);
+        mShadeSurface.setImportantForAccessibility(importance);
+        mShadeSurface.setBouncerShowing(bouncerShowing);
     }
 
     /**
@@ -3491,7 +3538,7 @@
      */
     @Override
     public void collapseShade() {
-        if (mNotificationPanelViewController.isTracking()) {
+        if (mShadeSurface.isTracking()) {
             mNotificationShadeWindowViewController.cancelCurrentTouch();
         }
         if (mPanelExpanded && mState == StatusBarState.SHADE) {
@@ -3499,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
@@ -3602,7 +3642,7 @@
                     }
                 }
 
-                mNotificationPanelViewController.setWillPlayDelayedDozeAmountAnimation(
+                mShadeSurface.setWillPlayDelayedDozeAmountAnimation(
                         mShouldDelayWakeUpAnimation);
                 mWakeUpCoordinator.setWakingUp(
                         /* wakingUp= */ true,
@@ -3644,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) {
@@ -3680,7 +3720,7 @@
                 !mDozeParameters.shouldControlScreenOff(), !mDeviceInteractive,
                 !mDozeServiceHost.isPulsing(), mDeviceProvisionedController.isFrpActive());
 
-        mNotificationPanelViewController.setTouchAndAnimationDisabled(disabled);
+        mShadeSurface.setTouchAndAnimationDisabled(disabled);
         mNotificationIconAreaController.setAnimationsEnabled(!disabled);
     }
 
@@ -3688,7 +3728,7 @@
         @Override
         public void onScreenTurningOn() {
             mFalsingCollector.onScreenTurningOn();
-            mNotificationPanelViewController.onScreenTurningOn();
+            mShadeSurface.onScreenTurningOn();
         }
 
         @Override
@@ -4332,7 +4372,7 @@
             }
             // We need the new R.id.keyguard_indication_area before recreating
             // mKeyguardIndicationController
-            mNotificationPanelViewController.onThemeChanged();
+            mShadeSurface.onThemeChanged();
 
             if (mStatusBarKeyguardViewManager != null) {
                 mStatusBarKeyguardViewManager.onThemeChanged();
@@ -4378,7 +4418,7 @@
                     mNavigationBarController.touchAutoDim(mDisplayId);
                     Trace.beginSection("CentralSurfaces#updateKeyguardState");
                     if (mState == StatusBarState.KEYGUARD) {
-                        mNotificationPanelViewController.cancelPendingCollapse();
+                        mShadeSurface.cancelPendingCollapse();
                     }
                     updateDozingState();
                     checkBarModes();
@@ -4404,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/KeyguardLiftController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt
index 8ee2c6f..74ab47f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt
@@ -29,6 +29,7 @@
 import com.android.systemui.Dumpable
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dump.DumpManager
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.util.Assert
 import com.android.systemui.util.sensors.AsyncSensorManager
@@ -46,6 +47,7 @@
     private val statusBarStateController: StatusBarStateController,
     private val asyncSensorManager: AsyncSensorManager,
     private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
+    private val keyguardFaceAuthInteractor: KeyguardFaceAuthInteractor,
     private val dumpManager: DumpManager
 ) : Dumpable, CoreStartable {
 
@@ -72,6 +74,7 @@
             // Not listening anymore since trigger events unregister themselves
             isListening = false
             updateListeningState()
+            keyguardFaceAuthInteractor.onDeviceLifted()
             keyguardUpdateMonitor.requestFaceAuth(
                 FaceAuthApiRequestReason.PICK_UP_GESTURE_TRIGGERED
             )
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 3268032..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,8 +47,9 @@
 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;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.disableflags.DisableStateTracker;
@@ -68,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;
@@ -75,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";
@@ -103,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;
@@ -119,6 +119,9 @@
     private final Object mLock = new Object();
     private final KeyguardLogger mLogger;
 
+    // TODO(b/273443374): remove
+    private NotificationMediaManager mNotificationMediaManager;
+
     private final ConfigurationController.ConfigurationListener mConfigurationListener =
             new ConfigurationController.ConfigurationListener() {
                 @Override
@@ -270,8 +273,7 @@
             StatusBarIconController statusBarIconController,
             StatusBarIconController.TintedIconManager.Factory tintedIconManagerFactory,
             BatteryMeterViewController batteryMeterViewController,
-            NotificationPanelViewController.NotificationPanelViewStateProvider
-                    notificationPanelViewStateProvider,
+            ShadeViewStateProvider shadeViewStateProvider,
             KeyguardStateController keyguardStateController,
             KeyguardBypassController bypassController,
             KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -283,7 +285,8 @@
             SecureSettings secureSettings,
             CommandQueue commandQueue,
             @Main Executor mainExecutor,
-            KeyguardLogger logger
+            KeyguardLogger logger,
+            NotificationMediaManager notificationMediaManager
     ) {
         super(view);
         mCarrierTextController = carrierTextController;
@@ -294,7 +297,7 @@
         mStatusBarIconController = statusBarIconController;
         mTintedIconManagerFactory = tintedIconManagerFactory;
         mBatteryMeterViewController = batteryMeterViewController;
-        mNotificationPanelViewStateProvider = notificationPanelViewStateProvider;
+        mShadeViewStateProvider = shadeViewStateProvider;
         mKeyguardStateController = keyguardStateController;
         mKeyguardBypassController = bypassController;
         mKeyguardUpdateMonitor = keyguardUpdateMonitor;
@@ -335,6 +338,7 @@
                 /* mask2= */ DISABLE2_SYSTEM_ICONS,
                 this::updateViewState
         );
+        mNotificationMediaManager = notificationMediaManager;
     }
 
     @Override
@@ -464,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() {
@@ -473,7 +477,7 @@
         }
 
         float alphaQsExpansion = 1 - Math.min(
-                1, mNotificationPanelViewStateProvider.getLockscreenShadeDragProgress() * 2);
+                1, mShadeViewStateProvider.getLockscreenShadeDragProgress() * 2);
 
         float newAlpha;
         if (mExplicitAlpha != -1) {
@@ -484,8 +488,11 @@
                     * (1.0f - mKeyguardHeadsUpShowingAmount);
         }
 
-        if (mSystemEventAnimator.isAnimationRunning()) {
+        if (mSystemEventAnimator.isAnimationRunning()
+                && !mNotificationMediaManager.isLockscreenWallpaperOnNotificationShade()) {
             newAlpha = Math.min(newAlpha, mSystemEventAnimatorAlpha);
+        } else {
+            mView.setTranslationX(0);
         }
 
         boolean hideForBypass =
@@ -521,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);
@@ -576,7 +583,7 @@
 
     void updateForHeadsUp(boolean animate) {
         boolean showingKeyguardHeadsUp =
-                isKeyguardShowing() && mNotificationPanelViewStateProvider.shouldHeadsUpBeVisible();
+                isKeyguardShowing() && mShadeViewStateProvider.shouldHeadsUpBeVisible();
         if (mShowingKeyguardHeadsUp != showingKeyguardHeadsUp) {
             mShowingKeyguardHeadsUp = showingKeyguardHeadsUp;
             if (isKeyguardShowing()) {
@@ -625,11 +632,21 @@
 
     private StatusBarSystemEventDefaultAnimator getSystemEventAnimator(boolean isAnimationRunning) {
         return new StatusBarSystemEventDefaultAnimator(getResources(), (alpha) -> {
-            mSystemEventAnimatorAlpha = alpha;
+            // TODO(b/273443374): remove if-else condition
+            if (!mNotificationMediaManager.isLockscreenWallpaperOnNotificationShade()) {
+                mSystemEventAnimatorAlpha = alpha;
+            } else {
+                mSystemEventAnimatorAlpha = 1f;
+            }
             updateViewState();
             return Unit.INSTANCE;
         }, (translationX) -> {
-            mView.setTranslationX(translationX);
+            // TODO(b/273443374): remove if-else condition
+            if (!mNotificationMediaManager.isLockscreenWallpaperOnNotificationShade()) {
+                mView.setTranslationX(translationX);
+            } else {
+                mView.setTranslationX(0);
+            }
             return Unit.INSTANCE;
         }, isAnimationRunning);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxAppearanceCalculator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxAppearanceCalculator.kt
index 3989854..f742645 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxAppearanceCalculator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxAppearanceCalculator.kt
@@ -26,10 +26,10 @@
 import com.android.internal.statusbar.LetterboxDetails
 import com.android.internal.util.ContrastColorUtil
 import com.android.internal.view.AppearanceRegion
+import com.android.systemui.Dumpable
+import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dump.DumpManager
 import com.android.systemui.statusbar.core.StatusBarInitializer.OnStatusBarViewInitializedListener
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
 import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent
 import java.io.PrintWriter
 import java.util.Arrays
@@ -50,25 +50,21 @@
  * Responsible for calculating the [Appearance] and [AppearanceRegion] for the status bar when apps
  * are letterboxed.
  */
-@CentralSurfacesScope
+@SysUISingleton
 class LetterboxAppearanceCalculator
 @Inject
 constructor(
     private val lightBarController: LightBarController,
-    private val dumpManager: DumpManager,
+    dumpManager: DumpManager,
     private val letterboxBackgroundProvider: LetterboxBackgroundProvider,
-) : OnStatusBarViewInitializedListener, CentralSurfacesComponent.Startable {
+) : OnStatusBarViewInitializedListener, Dumpable {
+
+    init {
+        dumpManager.registerCriticalDumpable(this)
+    }
 
     private var statusBarBoundsProvider: StatusBarBoundsProvider? = null
 
-    override fun start() {
-        dumpManager.registerCriticalDumpable(javaClass.simpleName) { pw, _ -> dump(pw) }
-    }
-
-    override fun stop() {
-        dumpManager.unregisterDumpable(javaClass.simpleName)
-    }
-
     private var lastAppearance: Int? = null
     private var lastAppearanceRegions: Array<AppearanceRegion>? = null
     private var lastLetterboxes: Array<LetterboxDetails>? = null
@@ -216,8 +212,8 @@
         return this.intersect(other)
     }
 
-    private fun dump(printWriter: PrintWriter) {
-        printWriter.println(
+    override fun dump(pw: PrintWriter, args: Array<out String>) {
+        pw.println(
             """
            lastAppearance: ${lastAppearance?.toAppearanceString()}
            lastAppearanceRegion: ${Arrays.toString(lastAppearanceRegions)},
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt
index 2763750..34c7059e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt
@@ -22,28 +22,25 @@
 import android.os.Handler
 import android.os.RemoteException
 import android.view.IWindowManager
+import com.android.systemui.CoreStartable
 import com.android.systemui.Dumpable
+import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Background
 import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.dump.DumpManager
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
 import java.io.PrintWriter
 import java.util.concurrent.Executor
 import javax.inject.Inject
 
 /** Responsible for providing information about the background of letterboxed apps. */
-@CentralSurfacesScope
+@SysUISingleton
 class LetterboxBackgroundProvider
 @Inject
 constructor(
     private val windowManager: IWindowManager,
     @Background private val backgroundExecutor: Executor,
-    private val dumpManager: DumpManager,
     private val wallpaperManager: WallpaperManager,
     @Main private val mainHandler: Handler,
-) : CentralSurfacesComponent.Startable, Dumpable {
-
+) : CoreStartable, Dumpable {
     @ColorInt
     var letterboxBackgroundColor: Int = Color.BLACK
         private set
@@ -57,7 +54,6 @@
         }
 
     override fun start() {
-        dumpManager.registerDumpable(javaClass.simpleName, this)
         fetchBackgroundColorInfo()
         wallpaperManager.addOnColorsChangedListener(wallpaperColorsListener, mainHandler)
     }
@@ -74,11 +70,6 @@
         }
     }
 
-    override fun stop() {
-        dumpManager.unregisterDumpable(javaClass.simpleName)
-        wallpaperManager.removeOnColorsChangedListener(wallpaperColorsListener)
-    }
-
     override fun dump(pw: PrintWriter, args: Array<out String>) {
         pw.println(
             """
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt
new file mode 100644
index 0000000..61377e2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt
@@ -0,0 +1,40 @@
+/*
+ * 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.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 {
+    @Binds
+    @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 0814ea5..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 */);
         }
@@ -233,6 +246,11 @@
         }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
     }
 
+    // TODO(b/273443374): remove
+    public boolean isLockscreenLiveWallpaperEnabled() {
+        return mWallpaperManager.isLockscreenLiveWallpaperEnabled();
+    }
+
     @Override
     public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
         pw.println(getClass().getSimpleName() + ":");
@@ -353,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/SystemBarAttributesListener.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemBarAttributesListener.kt
index fbe374c..c0269b8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemBarAttributesListener.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemBarAttributesListener.kt
@@ -23,10 +23,10 @@
 import android.view.WindowInsetsController.Behavior
 import com.android.internal.statusbar.LetterboxDetails
 import com.android.internal.view.AppearanceRegion
+import com.android.systemui.Dumpable
+import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dump.DumpManager
 import com.android.systemui.statusbar.SysuiStatusBarStateController
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
 import java.io.PrintWriter
 import javax.inject.Inject
 
@@ -37,7 +37,7 @@
  * It is responsible for modifying any attributes if necessary, and then notifying the other
  * downstream listeners.
  */
-@CentralSurfacesScope
+@SysUISingleton
 class SystemBarAttributesListener
 @Inject
 internal constructor(
@@ -45,18 +45,14 @@
     private val letterboxAppearanceCalculator: LetterboxAppearanceCalculator,
     private val statusBarStateController: SysuiStatusBarStateController,
     private val lightBarController: LightBarController,
-    private val dumpManager: DumpManager,
-) : CentralSurfacesComponent.Startable, StatusBarBoundsProvider.BoundsChangeListener {
+    dumpManager: DumpManager,
+) : Dumpable, StatusBarBoundsProvider.BoundsChangeListener {
 
     private var lastLetterboxAppearance: LetterboxAppearance? = null
     private var lastSystemBarAttributesParams: SystemBarAttributesParams? = null
 
-    override fun start() {
-        dumpManager.registerDumpable(javaClass.simpleName, this::dump)
-    }
-
-    override fun stop() {
-        dumpManager.unregisterDumpable(javaClass.simpleName)
+    init {
+        dumpManager.registerCriticalDumpable(this)
     }
 
     override fun onStatusBarBoundsChanged() {
@@ -128,7 +124,7 @@
     private fun shouldUseLetterboxAppearance(letterboxDetails: Array<LetterboxDetails>) =
         letterboxDetails.isNotEmpty()
 
-    private fun dump(printWriter: PrintWriter, strings: Array<String>) {
+    override fun dump(printWriter: PrintWriter, strings: Array<String>) {
         printWriter.println("lastSystemBarAttributesParams: $lastSystemBarAttributesParams")
         printWriter.println("lastLetterboxAppearance: $lastLetterboxAppearance")
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
index 2027305..bb22365 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
@@ -191,7 +191,7 @@
     }
 
     @Override
-    protected void onStart() {
+    protected final void onStart() {
         super.onStart();
 
         if (mDismissReceiver != null) {
@@ -204,10 +204,18 @@
         mDialogManager.setShowing(this, true);
         mSysUiState.setFlag(QuickStepContract.SYSUI_STATE_DIALOG_SHOWING, true)
                 .commitUpdate(mContext.getDisplayId());
+
+        start();
     }
 
+    /**
+     * Called when {@link #onStart} is called. Subclasses wishing to override {@link #onStart()}
+     * should override this method instead.
+     */
+    protected void start() {}
+
     @Override
-    protected void onStop() {
+    protected final void onStop() {
         super.onStop();
 
         if (mDismissReceiver != null) {
@@ -218,8 +226,16 @@
         mDialogManager.setShowing(this, false);
         mSysUiState.setFlag(QuickStepContract.SYSUI_STATE_DIALOG_SHOWING, false)
                 .commitUpdate(mContext.getDisplayId());
+
+        stop();
     }
 
+    /**
+     * Called when {@link #onStop} is called. Subclasses wishing to override {@link #onStop()}
+     * should override this method instead.
+     */
+    protected void stop() {}
+
     public void setShowForAllUsers(boolean show) {
         setShowForAllUsers(this, show);
     }
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 118bfc5..8fa803e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt
@@ -175,15 +175,19 @@
         // We animate the Y properly separately using the PropertyAnimator, as the panel
         // view also needs to update the end position.
         PropertyAnimator.cancelAnimation(keyguardView, AnimatableProperty.Y)
-        PropertyAnimator.setProperty<View>(keyguardView, AnimatableProperty.Y, currentY,
+        PropertyAnimator.setProperty(keyguardView, AnimatableProperty.Y, currentY,
                 AnimationProperties().setDuration(duration.toLong()),
                 true /* animate */)
 
-        keyguardView.animate()
+        // Cancel any existing CUJs before starting the animation
+        interactionJankMonitor.cancel(CUJ_SCREEN_OFF_SHOW_AOD)
+
+        PropertyAnimator.setProperty(
+            keyguardView, AnimatableProperty.ALPHA, 1f,
+            AnimationProperties()
+                .setDelay(0)
                 .setDuration(duration.toLong())
-                .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
-                .alpha(1f)
-                .withEndAction {
+                .setAnimationEndAction {
                     aodUiAnimationPlaying = false
 
                     // Lock the keyguard if it was waiting for the screen off animation to end.
@@ -199,30 +203,23 @@
                     // Done going to sleep, reset this flag.
                     decidedToAnimateGoingToSleep = null
 
-                    // We need to unset the listener. These are persistent for future animators
-                    keyguardView.animate().setListener(null)
                     interactionJankMonitor.end(CUJ_SCREEN_OFF_SHOW_AOD)
                 }
-                .setListener(object : AnimatorListenerAdapter() {
-                    override fun onAnimationCancel(animation: Animator?) {
-                        // If we're cancelled, reset state flags/listeners. The end action above
-                        // will not be called, which is what we want since that will finish the
-                        // screen off animation and show the lockscreen, which we don't want if we
-                        // were cancelled.
-                        aodUiAnimationPlaying = false
-                        decidedToAnimateGoingToSleep = null
-                        keyguardView.animate().setListener(null)
-
-                        interactionJankMonitor.cancel(CUJ_SCREEN_OFF_SHOW_AOD)
-                    }
-
-                    override fun onAnimationStart(animation: Animator?) {
-                        interactionJankMonitor.begin(
-                                mCentralSurfaces.notificationShadeWindowView,
-                                CUJ_SCREEN_OFF_SHOW_AOD)
-                    }
-                })
-                .start()
+                .setAnimationCancelAction {
+                    // If we're cancelled, reset state flags/listeners. The end action above
+                    // will not be called, which is what we want since that will finish the
+                    // screen off animation and show the lockscreen, which we don't want if we
+                    // were cancelled.
+                    aodUiAnimationPlaying = false
+                    decidedToAnimateGoingToSleep = null
+                    interactionJankMonitor.cancel(CUJ_SCREEN_OFF_SHOW_AOD)
+                }
+                .setCustomInterpolator(View.ALPHA, Interpolators.FAST_OUT_SLOW_IN),
+            true /* animate */)
+        interactionJankMonitor.begin(
+            mCentralSurfaces.notificationShadeWindowView,
+            CUJ_SCREEN_OFF_SHOW_AOD
+        )
     }
 
     override fun onStartedWakingUp() {
@@ -280,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())
 
@@ -329,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..b16d16a 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.
@@ -123,11 +122,6 @@
     LockIconViewController getLockIconViewController();
 
     /**
-     * Creates an AuthRippleViewController. Must be init after creation.
-     */
-    AuthRippleController getAuthRippleController();
-
-    /**
      * Creates a StatusBarHeadsUpChangeListener.
      */
     StatusBarHeadsUpChangeListener getStatusBarHeadsUpChangeListener();
@@ -150,11 +144,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/CentralSurfacesStartableModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesStartableModule.java
index b0532d7..7ded90f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesStartableModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesStartableModule.java
@@ -16,34 +16,13 @@
 
 package com.android.systemui.statusbar.phone.dagger;
 
-import com.android.systemui.statusbar.phone.LetterboxAppearanceCalculator;
-import com.android.systemui.statusbar.phone.LetterboxBackgroundProvider;
-import com.android.systemui.statusbar.phone.SystemBarAttributesListener;
+import dagger.Module;
+import dagger.multibindings.Multibinds;
 
 import java.util.Set;
 
-import dagger.Binds;
-import dagger.Module;
-import dagger.multibindings.IntoSet;
-import dagger.multibindings.Multibinds;
-
 @Module
 interface CentralSurfacesStartableModule {
     @Multibinds
     Set<CentralSurfacesComponent.Startable> multibindStartables();
-
-    @Binds
-    @IntoSet
-    CentralSurfacesComponent.Startable letterboxAppearanceCalculator(
-            LetterboxAppearanceCalculator letterboxAppearanceCalculator);
-
-    @Binds
-    @IntoSet
-    CentralSurfacesComponent.Startable sysBarAttrsListener(
-            SystemBarAttributesListener systemBarAttributesListener);
-
-    @Binds
-    @IntoSet
-    CentralSurfacesComponent.Startable letterboxBgProvider(
-            LetterboxBackgroundProvider letterboxBackgroundProvider);
 }
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..1a943e7 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
@@ -29,7 +29,6 @@
 import com.android.systemui.R;
 import com.android.systemui.battery.BatteryMeterView;
 import com.android.systemui.battery.BatteryMeterViewController;
-import com.android.systemui.biometrics.AuthRippleView;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.flags.FeatureFlags;
@@ -44,18 +43,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 +76,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 +99,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 +120,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 +134,10 @@
     }
 
     /** */
-    @Provides
+    @Binds
     @CentralSurfacesComponent.CentralSurfacesScope
-    public static NotificationPanelView getNotificationPanelView(
-            NotificationShadeWindowView notificationShadeWindowView) {
-        return notificationShadeWindowView.getNotificationPanelView();
-    }
+    abstract ShadeViewController bindsShadeViewController(
+            NotificationPanelViewController notificationPanelViewController);
 
     /** */
     @Provides
@@ -172,15 +149,6 @@
 
     /** */
     @Provides
-    @CentralSurfacesComponent.CentralSurfacesScope
-    @Nullable
-    public static AuthRippleView getAuthRippleView(
-            NotificationShadeWindowView notificationShadeWindowView) {
-        return notificationShadeWindowView.findViewById(R.id.auth_ripple);
-    }
-
-    /** */
-    @Provides
     @Named(SHADE_HEADER)
     @CentralSurfacesComponent.CentralSurfacesScope
     public static MotionLayout getLargeScreenShadeHeaderBarView(
@@ -267,12 +235,6 @@
 
     @Binds
     @IntoSet
-    abstract OnStatusBarViewInitializedListener statusBarInitializedListener(
-            LetterboxAppearanceCalculator letterboxAppearanceCalculator
-    );
-
-    @Binds
-    @IntoSet
     abstract StatusBarBoundsProvider.BoundsChangeListener sysBarAttrsListenerAsBoundsListener(
             SystemBarAttributesListener systemBarAttributesListener);
 
@@ -301,7 +263,7 @@
             StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory,
             StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager,
             KeyguardStateController keyguardStateController,
-            NotificationPanelViewController notificationPanelViewController,
+            ShadeViewController shadeViewController,
             StatusBarStateController statusBarStateController,
             CommandQueue commandQueue,
             CarrierConfigTracker carrierConfigTracker,
@@ -324,7 +286,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/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
index eaa1455..b3d2461 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
@@ -35,6 +35,7 @@
 import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor
 import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractorImpl
 import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter
+import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel
 import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy
 import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxyImpl
 import com.android.systemui.statusbar.pipeline.mobile.util.SubscriptionManagerProxy
@@ -53,6 +54,9 @@
 import dagger.Provides
 import dagger.multibindings.ClassKey
 import dagger.multibindings.IntoMap
+import kotlinx.coroutines.flow.Flow
+import java.util.function.Supplier
+import javax.inject.Named
 
 @Module
 abstract class StatusBarPipelineModule {
@@ -115,6 +119,17 @@
 
         @Provides
         @SysUISingleton
+        @Named(FIRST_MOBILE_SUB_SHOWING_NETWORK_TYPE_ICON)
+        fun provideFirstMobileSubShowingNetworkTypeIconProvider(
+            mobileIconsViewModel: MobileIconsViewModel,
+        ): Supplier<Flow<Boolean>> {
+            return Supplier<Flow<Boolean>> {
+                mobileIconsViewModel.firstMobileSubShowingNetworkTypeIcon
+            }
+        }
+
+        @Provides
+        @SysUISingleton
         @WifiInputLog
         fun provideWifiInputLogBuffer(factory: LogBufferFactory): LogBuffer {
             return factory.create("WifiInputLog", 50)
@@ -168,5 +183,8 @@
         fun provideVerboseMobileViewLogBuffer(factory: LogBufferFactory): LogBuffer {
             return factory.create("VerboseMobileViewLog", 100)
         }
+
+        const val FIRST_MOBILE_SUB_SHOWING_NETWORK_TYPE_ICON =
+            "FirstMobileSubShowingNetworkTypeIcon"
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt
index 075e6ec..a05ab84 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt
@@ -26,15 +26,7 @@
 import java.io.PrintWriter
 import javax.inject.Inject
 import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.SharingStarted
-import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.collectLatest
-import kotlinx.coroutines.flow.distinctUntilChanged
-import kotlinx.coroutines.flow.mapLatest
-import kotlinx.coroutines.flow.onEach
-import kotlinx.coroutines.flow.stateIn
 import kotlinx.coroutines.launch
 
 /**
@@ -46,39 +38,16 @@
  * the list of available mobile lines of service for which we want to show icons.
  */
 @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
-@OptIn(ExperimentalCoroutinesApi::class)
 @SysUISingleton
 class MobileUiAdapter
 @Inject
 constructor(
-    interactor: MobileIconsInteractor,
     private val iconController: StatusBarIconController,
-    private val iconsViewModelFactory: MobileIconsViewModel.Factory,
+    val mobileIconsViewModel: MobileIconsViewModel,
     private val logger: MobileViewLogger,
     @Application private val scope: CoroutineScope,
     private val statusBarPipelineFlags: StatusBarPipelineFlags,
 ) : CoreStartable {
-    private val mobileSubIds: Flow<List<Int>> =
-        interactor.filteredSubscriptions.mapLatest { subscriptions ->
-            subscriptions.map { subscriptionModel -> subscriptionModel.subscriptionId }
-        }
-
-    /**
-     * We expose the list of tracked subscriptions as a flow of a list of ints, where each int is
-     * the subscriptionId of the relevant subscriptions. These act as a key into the layouts which
-     * house the mobile infos.
-     *
-     * NOTE: this should go away as the view presenter learns more about this data pipeline
-     */
-    private val mobileSubIdsState: StateFlow<List<Int>> =
-        mobileSubIds
-            .distinctUntilChanged()
-            .onEach { logger.logUiAdapterSubIdsUpdated(it) }
-            .stateIn(scope, SharingStarted.WhileSubscribed(), listOf())
-
-    /** In order to keep the logs tame, we will reuse the same top-level mobile icons view model */
-    val mobileIconsViewModel = iconsViewModelFactory.create(mobileSubIdsState)
-
     private var isCollecting: Boolean = false
     private var lastValue: List<Int>? = null
 
@@ -90,7 +59,7 @@
         if (statusBarPipelineFlags.useNewMobileIcons()) {
             scope.launch {
                 isCollecting = true
-                mobileSubIds.collectLatest {
+                mobileIconsViewModel.subscriptionIdsFlow.collectLatest {
                     logger.logUiAdapterSubIdsSentToIconController(it)
                     lastValue = it
                     iconController.setNewMobileIconSubIds(it)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileViewLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileViewLogger.kt
index 90dff23..f2f9143 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileViewLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileViewLogger.kt
@@ -41,15 +41,6 @@
 
     private val collectionStatuses = mutableMapOf<String, Boolean>()
 
-    fun logUiAdapterSubIdsUpdated(subs: List<Int>) {
-        buffer.log(
-            TAG,
-            LogLevel.INFO,
-            { str1 = subs.toString() },
-            { "Sub IDs in MobileUiAdapter updated internally: $str1" },
-        )
-    }
-
     fun logUiAdapterSubIdsSentToIconController(subs: List<Int>) {
         buffer.log(
             TAG,
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/mobile/ui/viewmodel/MobileIconsViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt
index 2b90065..40b8c90 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt
@@ -29,18 +29,26 @@
 import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants
 import javax.inject.Inject
 import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.SharingStarted
 import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.flatMapLatest
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.mapLatest
+import kotlinx.coroutines.flow.stateIn
 import kotlinx.coroutines.launch
 
 /**
  * View model for describing the system's current mobile cellular connections. The result is a list
  * of [MobileIconViewModel]s which describe the individual icons and can be bound to
- * [ModernStatusBarMobileView]
+ * [ModernStatusBarMobileView].
  */
+@OptIn(ExperimentalCoroutinesApi::class)
+@SysUISingleton
 class MobileIconsViewModel
 @Inject
 constructor(
-    val subscriptionIdsFlow: StateFlow<List<Int>>,
     val logger: MobileViewLogger,
     private val verboseLogger: VerboseMobileViewLogger,
     private val interactor: MobileIconsInteractor,
@@ -51,22 +59,43 @@
 ) {
     @VisibleForTesting val mobileIconSubIdCache = mutableMapOf<Int, MobileIconViewModel>()
 
+    val subscriptionIdsFlow: StateFlow<List<Int>> =
+        interactor.filteredSubscriptions
+            .mapLatest { subscriptions ->
+                subscriptions.map { subscriptionModel -> subscriptionModel.subscriptionId }
+            }
+            .stateIn(scope, SharingStarted.WhileSubscribed(), listOf())
+
+    private val firstMobileSubViewModel: StateFlow<MobileIconViewModelCommon?> =
+        subscriptionIdsFlow
+            .map {
+                if (it.isEmpty()) {
+                    null
+                } else {
+                    // Mobile icons get reversed by [StatusBarIconController], so the last element
+                    // in this list will show up visually first.
+                    commonViewModelForSub(it.last())
+                }
+            }
+            .stateIn(scope, SharingStarted.WhileSubscribed(), null)
+
+    /**
+     * A flow that emits `true` if the mobile sub that's displayed first visually is showing its
+     * network type icon and `false` otherwise.
+     */
+    val firstMobileSubShowingNetworkTypeIcon: StateFlow<Boolean> =
+        firstMobileSubViewModel
+            .flatMapLatest { firstMobileSubViewModel ->
+                firstMobileSubViewModel?.networkTypeIcon?.map { it != null } ?: flowOf(false)
+            }
+            .stateIn(scope, SharingStarted.WhileSubscribed(), false)
+
     init {
         scope.launch { subscriptionIdsFlow.collect { removeInvalidModelsFromCache(it) } }
     }
 
     fun viewModelForSub(subId: Int, location: StatusBarLocation): LocationBasedMobileViewModel {
-        val common =
-            mobileIconSubIdCache[subId]
-                ?: MobileIconViewModel(
-                        subId,
-                        interactor.createMobileConnectionInteractorForSubId(subId),
-                        airplaneModeInteractor,
-                        constants,
-                        scope,
-                    )
-                    .also { mobileIconSubIdCache[subId] = it }
-
+        val common = commonViewModelForSub(subId)
         return LocationBasedMobileViewModel.viewModelForLocation(
             common,
             statusBarPipelineFlags,
@@ -75,34 +104,20 @@
         )
     }
 
+    private fun commonViewModelForSub(subId: Int): MobileIconViewModelCommon {
+        return mobileIconSubIdCache[subId]
+            ?: MobileIconViewModel(
+                    subId,
+                    interactor.createMobileConnectionInteractorForSubId(subId),
+                    airplaneModeInteractor,
+                    constants,
+                    scope,
+                )
+                .also { mobileIconSubIdCache[subId] = it }
+    }
+
     private fun removeInvalidModelsFromCache(subIds: List<Int>) {
         val subIdsToRemove = mobileIconSubIdCache.keys.filter { !subIds.contains(it) }
         subIdsToRemove.forEach { mobileIconSubIdCache.remove(it) }
     }
-
-    @SysUISingleton
-    class Factory
-    @Inject
-    constructor(
-        private val logger: MobileViewLogger,
-        private val verboseLogger: VerboseMobileViewLogger,
-        private val interactor: MobileIconsInteractor,
-        private val airplaneModeInteractor: AirplaneModeInteractor,
-        private val constants: ConnectivityConstants,
-        @Application private val scope: CoroutineScope,
-        private val statusBarPipelineFlags: StatusBarPipelineFlags,
-    ) {
-        fun create(subscriptionIdsFlow: StateFlow<List<Int>>): MobileIconsViewModel {
-            return MobileIconsViewModel(
-                subscriptionIdsFlow,
-                logger,
-                verboseLogger,
-                interactor,
-                airplaneModeInteractor,
-                constants,
-                scope,
-                statusBarPipelineFlags,
-            )
-        }
-    }
 }
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/pipeline/wifi/ui/binder/WifiViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt
index 9e8c814..e819c4f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt
@@ -36,7 +36,6 @@
 import kotlinx.coroutines.InternalCoroutinesApi
 import kotlinx.coroutines.awaitCancellation
 import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.collect
 import kotlinx.coroutines.flow.distinctUntilChanged
 import kotlinx.coroutines.launch
 
@@ -64,6 +63,7 @@
         val activityOutView = view.requireViewById<ImageView>(R.id.wifi_out)
         val activityContainerView = view.requireViewById<View>(R.id.inout_container)
         val airplaneSpacer = view.requireViewById<View>(R.id.wifi_airplane_spacer)
+        val signalSpacer = view.requireViewById<View>(R.id.wifi_signal_spacer)
 
         view.isVisible = true
         iconView.isVisible = true
@@ -133,6 +133,12 @@
                     }
                 }
 
+                launch {
+                    viewModel.isSignalSpacerVisible.distinctUntilChanged().collect { visible ->
+                        signalSpacer.isVisible = visible
+                    }
+                }
+
                 try {
                     awaitCancellation()
                 } finally {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt
index c9a0786..d9c2144 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt
@@ -30,8 +30,8 @@
 import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_FULL_ICONS
 import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_INTERNET_ICONS
 import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_NETWORK
-import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
 import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel
+import com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule.Companion.FIRST_MOBILE_SUB_SHOWING_NETWORK_TYPE_ICON
 import com.android.systemui.statusbar.pipeline.dagger.WifiTableLog
 import com.android.systemui.statusbar.pipeline.shared.ConnectivityConstants
 import com.android.systemui.statusbar.pipeline.shared.data.model.DataActivityModel
@@ -39,7 +39,9 @@
 import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
 import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
 import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
+import java.util.function.Supplier
 import javax.inject.Inject
+import javax.inject.Named
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.SharingStarted
@@ -53,24 +55,24 @@
 /**
  * Models the UI state for the status bar wifi icon.
  *
- * This class exposes three view models, one per status bar location: [home], [keyguard], and [qs].
- * In order to get the UI state for the wifi icon, you must use one of those view models (whichever
- * is correct for your location).
- *
- * Internally, this class maintains the current state of the wifi icon and notifies those three view
- * models of any changes.
+ * This is a singleton so that we don't have duplicate logs and should *not* be used directly to
+ * control views. Instead, use an instance of [LocationBasedWifiViewModel]. See
+ * [LocationBasedWifiViewModel.viewModelForLocation].
  */
 @SysUISingleton
 class WifiViewModel
 @Inject
 constructor(
     airplaneModeViewModel: AirplaneModeViewModel,
+    // TODO(b/238425913): The wifi icon shouldn't need to consume mobile information. A
+    //  container-level view model should do the work instead.
+    @Named(FIRST_MOBILE_SUB_SHOWING_NETWORK_TYPE_ICON)
+    shouldShowSignalSpacerProvider: Supplier<Flow<Boolean>>,
     connectivityConstants: ConnectivityConstants,
     private val context: Context,
     @WifiTableLog wifiTableLogBuffer: TableLogBuffer,
     interactor: WifiInteractor,
     @Application private val scope: CoroutineScope,
-    statusBarPipelineFlags: StatusBarPipelineFlags,
     wifiConstants: WifiConstants,
 ) : WifiViewModelCommon {
     /** Returns the icon to use based on the given network. */
@@ -183,6 +185,8 @@
     override val isAirplaneSpacerVisible: Flow<Boolean> =
         airplaneModeViewModel.isAirplaneModeIconVisible
 
+    override val isSignalSpacerVisible: Flow<Boolean> = shouldShowSignalSpacerProvider.get()
+
     companion object {
         @StringRes
         @VisibleForTesting
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelCommon.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelCommon.kt
index eccf023..617e192 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelCommon.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelCommon.kt
@@ -39,4 +39,7 @@
 
     /** True if the airplane spacer view should be visible. */
     val isAirplaneSpacerVisible: Flow<Boolean>
+
+    /** True if the spacer between the wifi icon and the RAT icon should be visible. */
+    val isSignalSpacerVisible: Flow<Boolean>
 }
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/KeyguardUserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java
index e9f0dcb..928e011 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherController.java
@@ -61,6 +61,7 @@
  * Manages the user switcher on the Keyguard.
  */
 @KeyguardUserSwitcherScope
+@Deprecated
 public class KeyguardUserSwitcherController extends ViewController<KeyguardUserSwitcherView> {
 
     private static final String TAG = "KeyguardUserSwitcherController";
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/temporarydisplay/chipbar/ChipbarCoordinator.kt b/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt
index a20a5b2..e819f94 100644
--- a/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt
@@ -31,6 +31,7 @@
 import android.view.accessibility.AccessibilityManager
 import android.widget.ImageView
 import android.widget.TextView
+import androidx.annotation.DimenRes
 import androidx.annotation.IdRes
 import androidx.annotation.VisibleForTesting
 import com.android.internal.widget.CachingIconView
@@ -180,8 +181,9 @@
 
         // Button
         val buttonView = currentView.requireViewById<TextView>(R.id.end_button)
-        if (newInfo.endItem is ChipbarEndItem.Button) {
-            TextViewBinder.bind(buttonView, newInfo.endItem.text)
+        val hasButton = newInfo.endItem is ChipbarEndItem.Button
+        if (hasButton) {
+            TextViewBinder.bind(buttonView, (newInfo.endItem as ChipbarEndItem.Button).text)
 
             val onClickListener =
                 View.OnClickListener { clickedView ->
@@ -196,6 +198,12 @@
             buttonView.visibility = View.GONE
         }
 
+        currentView
+            .getInnerView()
+            .setEndPadding(
+                if (hasButton) R.dimen.chipbar_outer_padding_half else R.dimen.chipbar_outer_padding
+            )
+
         // ---- Overall accessibility ----
         val iconDesc = newInfo.startIcon.icon.contentDescription
         val loadedIconDesc =
@@ -309,6 +317,15 @@
         viewUtil.setRectToViewWindowLocation(view, outRect)
     }
 
+    private fun View.setEndPadding(@DimenRes endPaddingDimen: Int) {
+        this.setPaddingRelative(
+            this.paddingStart,
+            this.paddingTop,
+            context.resources.getDimensionPixelSize(endPaddingDimen),
+            this.paddingBottom,
+        )
+    }
+
     private fun Boolean.visibleIfTrue(): Int {
         return if (this) {
             View.VISIBLE
diff --git a/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt b/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt
index 6e58f22..52f2d11 100644
--- a/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt
+++ b/packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt
@@ -18,7 +18,7 @@
 
 import android.os.VibrationEffect
 import android.view.View
-import androidx.annotation.ColorRes
+import androidx.annotation.AttrRes
 import com.android.systemui.R
 import com.android.systemui.common.shared.model.Text
 import com.android.systemui.common.shared.model.TintedIcon
@@ -49,7 +49,9 @@
     override val priority: ViewPriority,
 ) : TemporaryViewInfo() {
     companion object {
-        @ColorRes val DEFAULT_ICON_TINT = R.color.chipbar_text_and_icon_color
+        // LINT.IfChange
+        @AttrRes val DEFAULT_ICON_TINT = com.android.internal.R.attr.materialColorOnSecondaryFixed
+        // LINT.ThenChange(systemui/res/layout/chipbar.xml)
     }
 }
 
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/toast/SystemUIToast.java b/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java
index 05e5666..29f16c7 100644
--- a/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java
+++ b/packages/SystemUI/src/com/android/systemui/toast/SystemUIToast.java
@@ -272,10 +272,10 @@
 
     private static boolean showApplicationIcon(ApplicationInfo appInfo,
             PackageManager packageManager) {
-        if (hasFlag(appInfo.flags, FLAG_UPDATED_SYSTEM_APP)) {
+        if (hasFlag(appInfo.flags, FLAG_UPDATED_SYSTEM_APP | FLAG_SYSTEM)) {
             return packageManager.getLaunchIntentForPackage(appInfo.packageName) != null;
         }
-        return !hasFlag(appInfo.flags, FLAG_SYSTEM);
+        return true;
     }
 
     private static boolean hasFlag(int flags, int flag) {
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/TraceUtils.kt b/packages/SystemUI/src/com/android/systemui/util/TraceUtils.kt
index 64234c2..41c6b5d 100644
--- a/packages/SystemUI/src/com/android/systemui/util/TraceUtils.kt
+++ b/packages/SystemUI/src/com/android/systemui/util/TraceUtils.kt
@@ -16,20 +16,22 @@
 
 package com.android.systemui.util
 
-import android.os.Trace
+import android.os.Handler
 import android.os.TraceNameSupplier
+import androidx.tracing.Trace
 
 /**
- * Run a block within a [Trace] section.
- * Calls [Trace.beginSection] before and [Trace.endSection] after the passed block.
+ * Run a block within a [Trace] section. Calls [Trace.beginSection] before and [Trace.endSection]
+ * after the passed block. If tracing is disabled, it will run the block directly to avoid using an
+ * unnecessary try-finally block.
  */
 inline fun <T> traceSection(tag: String, block: () -> T): T =
-        if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) {
-            Trace.traceBegin(Trace.TRACE_TAG_APP, tag)
+        if (Trace.isEnabled()) {
+            Trace.beginSection(tag)
             try {
                 block()
             } finally {
-                Trace.traceEnd(Trace.TRACE_TAG_APP)
+                Trace.endSection()
             }
         } else {
             block()
@@ -42,8 +44,10 @@
         }
 
         /**
-         * Helper function for creating a Runnable object that implements TraceNameSupplier.
-         * This is useful for posting Runnables to Handlers with meaningful names.
+         * Helper function for creating a [Runnable] that implements [TraceNameSupplier]. This is
+         * useful when posting to a [Handler] so that the [Runnable] has a meaningful name in the
+         * trace. Otherwise, the class name of the [Runnable] is used, which is often something like
+         * `pkg.MyClass$$ExternalSyntheticLambda0`.
          */
         inline fun namedRunnable(tag: String, crossinline block: () -> Unit): Runnable {
             return object : Runnable, TraceNameSupplier {
diff --git a/packages/SystemUI/src/com/android/systemui/util/kotlin/Dagger.kt b/packages/SystemUI/src/com/android/systemui/util/kotlin/Dagger.kt
new file mode 100644
index 0000000..c587f2e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/kotlin/Dagger.kt
@@ -0,0 +1,32 @@
+/*
+ * 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.kotlin
+
+import dagger.Lazy
+import kotlin.reflect.KProperty
+
+/**
+ * Extension operator that allows developers to use [dagger.Lazy] as a property delegate:
+ * ```kotlin
+ *    class MyClass @Inject constructor(
+ *      lazyDependency: dagger.Lazy<Foo>,
+ *    ) {
+ *      val dependency: Foo by lazyDependency
+ *    }
+ * ```
+ */
+operator fun <T> Lazy<T>.getValue(thisRef: Any?, property: KProperty<*>): T = get()
diff --git a/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java b/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java
index 209ea41..58cffa7 100644
--- a/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java
+++ b/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java
@@ -58,6 +58,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -418,6 +419,7 @@
         @Inject
         public MemoryTile(
                 QSHost host,
+                QsEventLogger uiEventLogger,
                 @Background Looper backgroundLooper,
                 @Main Handler mainHandler,
                 FalsingManager falsingManager,
@@ -428,7 +430,7 @@
                 GarbageMonitor monitor,
                 PanelInteractor panelInteractor
         ) {
-            super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+            super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                     statusBarStateController, activityStarter, qsLogger);
             gm = monitor;
             mPanelInteractor = panelInteractor;
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/CsdWarningDialog.java b/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java
index 35af444..db7fa14 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/CsdWarningDialog.java
@@ -16,20 +16,34 @@
 
 package com.android.systemui.volume;
 
+import static android.app.PendingIntent.FLAG_IMMUTABLE;
+
 import android.annotation.StringRes;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.media.AudioManager;
-import android.os.CountDownTimer;
+import android.provider.Settings;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.WindowManager;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.messages.nano.SystemMessageProto;
+import com.android.systemui.R;
+import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.statusbar.phone.SystemUIDialog;
+import com.android.systemui.util.NotificationChannels;
+import com.android.systemui.util.concurrency.DelayableExecutor;
+
+import dagger.assisted.Assisted;
+import dagger.assisted.AssistedFactory;
+import dagger.assisted.AssistedInject;
 
 /**
  * A class that implements the four Computed Sound Dose-related warnings defined in {@link AudioManager}:
@@ -53,34 +67,58 @@
  * communication between the native audio framework that implements the dose computation and the
  * audio service.
  */
-public abstract class CsdWarningDialog extends SystemUIDialog
+public class CsdWarningDialog extends SystemUIDialog
         implements DialogInterface.OnDismissListener, DialogInterface.OnClickListener {
 
     private static final String TAG = Util.logTag(CsdWarningDialog.class);
 
     private static final int KEY_CONFIRM_ALLOWED_AFTER_MS = 1000; // milliseconds
     // time after which action is taken when the user hasn't ack'd or dismissed the dialog
-    private static final int NO_ACTION_TIMEOUT_MS = 5000;
+    public static final int NO_ACTION_TIMEOUT_MS = 5000;
 
     private final Context mContext;
     private final AudioManager mAudioManager;
     private final @AudioManager.CsdWarning int mCsdWarning;
     private final Object mTimerLock = new Object();
+
     /**
      * Timer to keep track of how long the user has before an action (here volume reduction) is
      * taken on their behalf.
      */
     @GuardedBy("mTimerLock")
-    private final CountDownTimer mNoUserActionTimer;
+    private Runnable mNoUserActionRunnable;
+    private Runnable mCancelScheduledNoUserActionRunnable = null;
+
+    private final DelayableExecutor mDelayableExecutor;
+    private NotificationManager mNotificationManager;
+    private Runnable mOnCleanup;
 
     private long mShowTime;
 
-    public CsdWarningDialog(@AudioManager.CsdWarning int csdWarning, Context context,
-            AudioManager audioManager) {
+    /**
+     * To inject dependencies and allow for easier testing
+     */
+    @AssistedFactory
+    public interface Factory {
+        /**
+         * Create a dialog object
+         */
+        CsdWarningDialog create(int csdWarning, Runnable onCleanup);
+    }
+
+    @AssistedInject
+    public CsdWarningDialog(@Assisted @AudioManager.CsdWarning int csdWarning, Context context,
+            AudioManager audioManager, NotificationManager notificationManager,
+            @Background DelayableExecutor delayableExecutor, @Assisted Runnable onCleanup) {
         super(context);
         mCsdWarning = csdWarning;
         mContext = context;
         mAudioManager = audioManager;
+        mNotificationManager = notificationManager;
+        mOnCleanup = onCleanup;
+
+        mDelayableExecutor = delayableExecutor;
+
         getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
         setShowForAllUsers(true);
         setMessage(mContext.getString(getStringForWarning(csdWarning)));
@@ -95,25 +133,24 @@
                 Context.RECEIVER_EXPORTED_UNAUDITED);
 
         if (csdWarning == AudioManager.CSD_WARNING_DOSE_REACHED_1X) {
-            mNoUserActionTimer = new CountDownTimer(NO_ACTION_TIMEOUT_MS, NO_ACTION_TIMEOUT_MS) {
-                @Override
-                public void onTick(long millisUntilFinished) { }
-
-                @Override
-                public void onFinish() {
-                    if (mCsdWarning == AudioManager.CSD_WARNING_DOSE_REACHED_1X) {
-                        // unlike on the 5x dose repeat, level is only reduced to RS1
-                        // when the warning is not acknowledged quick enough
-                        mAudioManager.lowerVolumeToRs1();
-                    }
+            mNoUserActionRunnable = () -> {
+                if (mCsdWarning == AudioManager.CSD_WARNING_DOSE_REACHED_1X) {
+                    // unlike on the 5x dose repeat, level is only reduced to RS1 when the warning
+                    // is not acknowledged quickly enough
+                    mAudioManager.lowerVolumeToRs1();
+                    sendNotification();
                 }
             };
         } else {
-            mNoUserActionTimer = null;
+            mNoUserActionRunnable = null;
         }
     }
 
-    protected abstract void cleanUp();
+    private void cleanUp() {
+        if (mOnCleanup != null) {
+            mOnCleanup.run();
+        }
+    }
 
     // NOT overriding onKeyDown as we're not allowing a dismissal on any key other than
     // VOLUME_DOWN, and for this, we don't need to track if it's the start of a new
@@ -149,25 +186,21 @@
     }
 
     @Override
-    protected void onStart() {
-        super.onStart();
+    protected void start() {
         mShowTime = System.currentTimeMillis();
         synchronized (mTimerLock) {
-            if (mNoUserActionTimer != null) {
-                new Thread(() -> {
-                    synchronized (mTimerLock) {
-                        mNoUserActionTimer.start();
-                    }
-                }).start();
+            if (mNoUserActionRunnable != null) {
+                mCancelScheduledNoUserActionRunnable = mDelayableExecutor.executeDelayed(
+                        mNoUserActionRunnable, NO_ACTION_TIMEOUT_MS);
             }
         }
     }
 
     @Override
-    protected void onStop() {
+    protected void stop() {
         synchronized (mTimerLock) {
-            if (mNoUserActionTimer != null) {
-                mNoUserActionTimer.cancel();
+            if (mCancelScheduledNoUserActionRunnable != null) {
+                mCancelScheduledNoUserActionRunnable.run();
             }
         }
     }
@@ -212,4 +245,32 @@
         Log.e(TAG, "Invalid CSD warning event " + csdWarning, new Exception());
         return com.android.internal.R.string.csd_dose_reached_warning;
     }
+
+
+    /**
+     * In case user did not respond to the dialog, they still need to know volume was lowered.
+     */
+    private void sendNotification() {
+        Intent intent = new Intent(Settings.ACTION_SOUND_SETTINGS);
+        PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent,
+                FLAG_IMMUTABLE);
+
+        String text = mContext.getString(R.string.csd_system_lowered_text);
+        String title = mContext.getString(R.string.csd_lowered_title);
+
+        Notification.Builder builder =
+                new Notification.Builder(mContext, NotificationChannels.ALERTS)
+                        .setSmallIcon(R.drawable.hearing)
+                        .setContentTitle(title)
+                        .setContentText(text)
+                        .setContentIntent(pendingIntent)
+                        .setStyle(new Notification.BigTextStyle().bigText(text))
+                        .setVisibility(Notification.VISIBILITY_PUBLIC)
+                        .setLocalOnly(true)
+                        .setAutoCancel(true)
+                        .setCategory(Notification.CATEGORY_SYSTEM);
+
+        mNotificationManager.notify(SystemMessageProto.SystemMessage.NOTE_CSD_LOWER_AUDIO,
+                builder.build());
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java b/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java
index 5b188b2..d42b964 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java
@@ -95,8 +95,7 @@
     }
 
     @Override
-    protected void onStart() {
-        super.onStart();
+    protected void start() {
         mShowTime = System.currentTimeMillis();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
index 95cc12a..77210b7 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
@@ -263,6 +263,7 @@
     private final ConfigurationController mConfigurationController;
     private final MediaOutputDialogFactory mMediaOutputDialogFactory;
     private final VolumePanelFactory mVolumePanelFactory;
+    private final CsdWarningDialog.Factory mCsdWarningDialogFactory;
     private final ActivityStarter mActivityStarter;
 
     private boolean mShowing;
@@ -311,6 +312,7 @@
             InteractionJankMonitor interactionJankMonitor,
             DeviceConfigProxy deviceConfigProxy,
             Executor executor,
+            CsdWarningDialog.Factory csdWarningDialogFactory,
             DumpManager dumpManager) {
         mContext =
                 new ContextThemeWrapper(context, R.style.volume_dialog_theme);
@@ -322,6 +324,7 @@
         mConfigurationController = configurationController;
         mMediaOutputDialogFactory = mediaOutputDialogFactory;
         mVolumePanelFactory = volumePanelFactory;
+        mCsdWarningDialogFactory = csdWarningDialogFactory;
         mActivityStarter = activityStarter;
         mShowActiveStreamOnly = showActiveStreamOnly();
         mHasSeenODICaptionsTooltip =
@@ -2084,21 +2087,21 @@
         rescheduleTimeoutH();
     }
 
-    private void showCsdWarningH(int csdWarning, int durationMs) {
+    @VisibleForTesting void showCsdWarningH(int csdWarning, int durationMs) {
         synchronized (mSafetyWarningLock) {
+
             if (mCsdDialog != null) {
                 return;
             }
-            mCsdDialog = new CsdWarningDialog(csdWarning,
-                    mContext, mController.getAudioManager()) {
-                @Override
-                protected void cleanUp() {
-                    synchronized (mSafetyWarningLock) {
-                        mCsdDialog = null;
-                    }
-                    recheckH(null);
+
+            final Runnable cleanUp = () -> {
+                synchronized (mSafetyWarningLock) {
+                    mCsdDialog = null;
                 }
+                recheckH(null);
             };
+
+            mCsdDialog = mCsdWarningDialogFactory.create(csdWarning, cleanUp);
             mCsdDialog.show();
         }
         recheckH(null);
@@ -2340,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/src/com/android/systemui/volume/VolumePanelDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePanelDialog.java
index 87a167b..96936e3 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumePanelDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePanelDialog.java
@@ -196,16 +196,14 @@
     }
 
     @Override
-    protected void onStart() {
-        super.onStart();
+    protected void start() {
         Log.d(TAG, "onStart");
         mLifecycleRegistry.setCurrentState(Lifecycle.State.STARTED);
         mLifecycleRegistry.setCurrentState(Lifecycle.State.RESUMED);
     }
 
     @Override
-    protected void onStop() {
-        super.onStop();
+    protected void stop() {
         Log.d(TAG, "onStop");
         mLifecycleRegistry.setCurrentState(Lifecycle.State.DESTROYED);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java b/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java
index 0ab6c69..14d3ca3 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java
@@ -30,17 +30,18 @@
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.util.DeviceConfigProxy;
+import com.android.systemui.volume.CsdWarningDialog;
 import com.android.systemui.volume.VolumeComponent;
 import com.android.systemui.volume.VolumeDialogComponent;
 import com.android.systemui.volume.VolumeDialogImpl;
 import com.android.systemui.volume.VolumePanelFactory;
 
-import java.util.concurrent.Executor;
-
 import dagger.Binds;
 import dagger.Module;
 import dagger.Provides;
 
+import java.util.concurrent.Executor;
+
 
 /** Dagger Module for code in the volume package. */
 @Module
@@ -63,6 +64,7 @@
             InteractionJankMonitor interactionJankMonitor,
             DeviceConfigProxy deviceConfigProxy,
             @Main Executor executor,
+            CsdWarningDialog.Factory csdFactory,
             DumpManager dumpManager) {
         VolumeDialogImpl impl = new VolumeDialogImpl(
                 context,
@@ -76,6 +78,7 @@
                 interactionJankMonitor,
                 deviceConfigProxy,
                 executor,
+                csdFactory,
                 dumpManager);
         impl.setStreamImportant(AudioManager.STREAM_SYSTEM, false);
         impl.setAutomute(true);
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/controller/WalletContextualLocationsService.kt b/packages/SystemUI/src/com/android/systemui/wallet/controller/WalletContextualLocationsService.kt
new file mode 100644
index 0000000..1c17fc3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wallet/controller/WalletContextualLocationsService.kt
@@ -0,0 +1,93 @@
+package com.android.systemui.wallet.controller
+
+import android.content.Intent
+import android.os.IBinder
+import android.util.Log
+import androidx.annotation.VisibleForTesting
+import androidx.lifecycle.LifecycleService
+import androidx.lifecycle.lifecycleScope
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * Serves as an intermediary between QuickAccessWalletService and ContextualCardManager (in PCC).
+ * When QuickAccessWalletService has a list of store locations, WalletContextualLocationsService
+ * will send them to ContextualCardManager. When the user enters a store location, this Service
+ * class will be notified, and WalletContextualSuggestionsController will be updated.
+ */
+class WalletContextualLocationsService
+@Inject
+constructor(
+    private val controller: WalletContextualSuggestionsController,
+    private val featureFlags: FeatureFlags,
+) : LifecycleService() {
+    private var listener: IWalletCardsUpdatedListener? = null
+    private var scope: CoroutineScope = this.lifecycleScope
+
+    @VisibleForTesting
+    constructor(
+        controller: WalletContextualSuggestionsController,
+        featureFlags: FeatureFlags,
+        scope: CoroutineScope,
+    ) : this(controller, featureFlags) {
+        this.scope = scope
+    }
+
+    override fun onBind(intent: Intent): IBinder {
+        super.onBind(intent)
+        scope.launch {
+            controller.allWalletCards.collect { cards ->
+                val cardsSize = cards.size
+                Log.i(TAG, "Number of cards registered $cardsSize")
+                listener?.registerNewWalletCards(cards)
+            }
+        }
+        return binder
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        listener = null
+    }
+
+    @VisibleForTesting
+    fun addWalletCardsUpdatedListenerInternal(listener: IWalletCardsUpdatedListener) {
+        if (!featureFlags.isEnabled(Flags.ENABLE_WALLET_CONTEXTUAL_LOYALTY_CARDS)) {
+            return
+        }
+        this.listener = listener // Currently, only one listener at a time is supported
+        // Sends WalletCard objects from QuickAccessWalletService to the listener
+        val cards = controller.allWalletCards.value
+        if (!cards.isEmpty()) {
+            val cardsSize = cards.size
+            Log.i(TAG, "Number of cards registered $cardsSize")
+            listener.registerNewWalletCards(cards)
+        }
+    }
+
+    @VisibleForTesting
+    fun onWalletContextualLocationsStateUpdatedInternal(storeLocations: List<String>) {
+        if (!featureFlags.isEnabled(Flags.ENABLE_WALLET_CONTEXTUAL_LOYALTY_CARDS)) {
+            return
+        }
+        Log.i(TAG, "Entered store $storeLocations")
+        controller.setSuggestionCardIds(storeLocations.toSet())
+    }
+
+    private val binder: IWalletContextualLocationsService.Stub
+    = object : IWalletContextualLocationsService.Stub() {
+        override fun addWalletCardsUpdatedListener(listener: IWalletCardsUpdatedListener) {
+            addWalletCardsUpdatedListenerInternal(listener)
+        }
+        override fun onWalletContextualLocationsStateUpdated(storeLocations: List<String>) {
+            onWalletContextualLocationsStateUpdatedInternal(storeLocations)
+        }
+    }
+
+    companion object {
+        private const val TAG = "WalletContextualLocationsService"
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/controller/WalletContextualSuggestionsController.kt b/packages/SystemUI/src/com/android/systemui/wallet/controller/WalletContextualSuggestionsController.kt
index 518f5a7..b3ad9b0 100644
--- a/packages/SystemUI/src/com/android/systemui/wallet/controller/WalletContextualSuggestionsController.kt
+++ b/packages/SystemUI/src/com/android/systemui/wallet/controller/WalletContextualSuggestionsController.kt
@@ -36,6 +36,7 @@
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.asStateFlow
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.emptyFlow
@@ -57,7 +58,8 @@
 ) {
     private val cardsReceivedCallbacks: MutableSet<(List<WalletCard>) -> Unit> = mutableSetOf()
 
-    private val allWalletCards: Flow<List<WalletCard>> =
+    /** All potential cards. */
+    val allWalletCards: StateFlow<List<WalletCard>> =
         if (featureFlags.isEnabled(Flags.ENABLE_WALLET_CONTEXTUAL_LOYALTY_CARDS)) {
             // TODO(b/237409756) determine if we should debounce this so we don't call the service
             // too frequently. Also check if the list actually changed before calling callbacks.
@@ -107,12 +109,13 @@
                     emptyList()
                 )
         } else {
-            emptyFlow()
+            MutableStateFlow<List<WalletCard>>(emptyList()).asStateFlow()
         }
 
     private val _suggestionCardIds: MutableStateFlow<Set<String>> = MutableStateFlow(emptySet())
     private val contextualSuggestionsCardIds: Flow<Set<String>> = _suggestionCardIds.asStateFlow()
 
+    /** Contextually-relevant cards. */
     val contextualSuggestionCards: Flow<List<WalletCard>> =
         combine(allWalletCards, contextualSuggestionsCardIds) { cards, ids ->
                 val ret =
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/dagger/WalletModule.java b/packages/SystemUI/src/com/android/systemui/wallet/dagger/WalletModule.java
index 9429d89..efba3e5 100644
--- a/packages/SystemUI/src/com/android/systemui/wallet/dagger/WalletModule.java
+++ b/packages/SystemUI/src/com/android/systemui/wallet/dagger/WalletModule.java
@@ -35,6 +35,8 @@
 import dagger.multibindings.IntoMap;
 import dagger.multibindings.StringKey;
 
+import android.app.Service;
+import com.android.systemui.wallet.controller.WalletContextualLocationsService;
 
 /**
  * Module for injecting classes in Wallet.
@@ -42,6 +44,12 @@
 @Module
 public abstract class WalletModule {
 
+    @Binds
+    @IntoMap
+    @ClassKey(WalletContextualLocationsService.class)
+    abstract Service bindWalletContextualLocationsService(
+        WalletContextualLocationsService service);
+
     /** */
     @Binds
     @IntoMap
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java b/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
index a4b093d..a5365fb 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
@@ -66,7 +66,7 @@
 import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
-import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
+import com.android.systemui.statusbar.notification.interruption.VisualInterruptionDecisionProvider;
 import com.android.systemui.statusbar.phone.StatusBarWindowCallback;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.statusbar.policy.ZenModeController;
@@ -100,7 +100,7 @@
     private final INotificationManager mNotificationManager;
     private final IDreamManager mDreamManager;
     private final NotificationVisibilityProvider mVisibilityProvider;
-    private final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
+    private final VisualInterruptionDecisionProvider mVisualInterruptionDecisionProvider;
     private final NotificationLockscreenUserManager mNotifUserManager;
     private final CommonNotifCollection mCommonNotifCollection;
     private final NotifPipeline mNotifPipeline;
@@ -126,7 +126,7 @@
             INotificationManager notificationManager,
             IDreamManager dreamManager,
             NotificationVisibilityProvider visibilityProvider,
-            NotificationInterruptStateProvider interruptionStateProvider,
+            VisualInterruptionDecisionProvider visualInterruptionDecisionProvider,
             ZenModeController zenModeController,
             NotificationLockscreenUserManager notifUserManager,
             CommonNotifCollection notifCollection,
@@ -145,7 +145,7 @@
                     notificationManager,
                     dreamManager,
                     visibilityProvider,
-                    interruptionStateProvider,
+                    visualInterruptionDecisionProvider,
                     zenModeController,
                     notifUserManager,
                     notifCollection,
@@ -169,7 +169,7 @@
             INotificationManager notificationManager,
             IDreamManager dreamManager,
             NotificationVisibilityProvider visibilityProvider,
-            NotificationInterruptStateProvider interruptionStateProvider,
+            VisualInterruptionDecisionProvider visualInterruptionDecisionProvider,
             ZenModeController zenModeController,
             NotificationLockscreenUserManager notifUserManager,
             CommonNotifCollection notifCollection,
@@ -185,7 +185,7 @@
         mNotificationManager = notificationManager;
         mDreamManager = dreamManager;
         mVisibilityProvider = visibilityProvider;
-        mNotificationInterruptStateProvider = interruptionStateProvider;
+        mVisualInterruptionDecisionProvider = visualInterruptionDecisionProvider;
         mNotifUserManager = notifUserManager;
         mCommonNotifCollection = notifCollection;
         mNotifPipeline = notifPipeline;
@@ -272,7 +272,7 @@
                     for (NotificationEntry entry : activeEntries) {
                         if (mNotifUserManager.isCurrentProfile(entry.getSbn().getUserId())
                                 && savedBubbleKeys.contains(entry.getKey())
-                                && mNotificationInterruptStateProvider.shouldBubbleUp(entry)
+                                && shouldBubbleUp(entry)
                                 && entry.isBubble()) {
                             result.add(notifToBubbleEntry(entry));
                         }
@@ -416,16 +416,13 @@
     }
 
     void onEntryAdded(NotificationEntry entry) {
-        if (mNotificationInterruptStateProvider.shouldBubbleUp(entry)
-                && entry.isBubble()) {
+        if (shouldBubbleUp(entry) && entry.isBubble()) {
             mBubbles.onEntryAdded(notifToBubbleEntry(entry));
         }
     }
 
     void onEntryUpdated(NotificationEntry entry, boolean fromSystem) {
-        boolean shouldBubble = mNotificationInterruptStateProvider.shouldBubbleUp(entry);
-        mBubbles.onEntryUpdated(notifToBubbleEntry(entry),
-                shouldBubble, fromSystem);
+        mBubbles.onEntryUpdated(notifToBubbleEntry(entry), shouldBubbleUp(entry), fromSystem);
     }
 
     void onEntryRemoved(NotificationEntry entry) {
@@ -438,12 +435,8 @@
         for (int i = 0; i < orderedKeys.length; i++) {
             String key = orderedKeys[i];
             final NotificationEntry entry = mCommonNotifCollection.getEntry(key);
-            BubbleEntry bubbleEntry = entry != null
-                    ? notifToBubbleEntry(entry)
-                    : null;
-            boolean shouldBubbleUp = entry != null
-                    ? mNotificationInterruptStateProvider.shouldBubbleUp(entry)
-                    : false;
+            BubbleEntry bubbleEntry = entry != null ? notifToBubbleEntry(entry) : null;
+            boolean shouldBubbleUp = entry != null ? shouldBubbleUp(entry) : false;
             pendingOrActiveNotif.put(key, new Pair<>(bubbleEntry, shouldBubbleUp));
         }
         mBubbles.onRankingUpdated(rankingMap, pendingOrActiveNotif);
@@ -637,6 +630,10 @@
         }
     }
 
+    private boolean shouldBubbleUp(NotificationEntry e) {
+        return mVisualInterruptionDecisionProvider.makeAndLogBubbleDecision(e).getShouldInterrupt();
+    }
+
     /**
      * Callback for when the BubbleController wants to interact with the notification pipeline to:
      * - Remove a previously bubbled notification
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
index e492534..b3e7cb0 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
@@ -345,7 +345,8 @@
     }
 
     void initDesktopMode(DesktopMode desktopMode) {
-        desktopMode.addListener(new DesktopModeTaskRepository.VisibleTasksListener() {
+        desktopMode.addVisibleTasksListener(
+                new DesktopModeTaskRepository.VisibleTasksListener() {
             @Override
             public void onVisibilityChanged(boolean hasFreeformTasks) {
                 mSysUiState.setFlag(SYSUI_STATE_FREEFORM_ACTIVE_IN_DESKTOP_MODE, hasFreeformTasks)
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 b9f8dd94..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,14 +385,14 @@
         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();
 
         mExecutor.runAllReady();
-        assertEquals(View.GONE, mFakeDateView.getVisibility());
+        assertEquals(View.INVISIBLE, mFakeDateView.getVisibility());
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
index d760189..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;
@@ -67,6 +65,7 @@
 import com.android.systemui.classifier.FalsingCollector;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.flags.Flags;
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
 import com.android.systemui.log.SessionTracker;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.FalsingManager;
@@ -163,6 +162,10 @@
     @Captor
     private ArgumentCaptor<KeyguardSecurityContainer.SwipeListener> mSwipeListenerArgumentCaptor;
 
+    @Captor
+    private ArgumentCaptor<KeyguardSecurityViewFlipperController.OnViewInflatedCallback>
+            mOnViewInflatedCallbackArgumentCaptor;
+
     private KeyguardSecurityContainerController mKeyguardSecurityContainerController;
     private KeyguardPasswordViewController mKeyguardPasswordViewController;
     private KeyguardPasswordView mKeyguardPasswordView;
@@ -183,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);
@@ -208,7 +209,8 @@
                 mConfigurationController, mFalsingCollector, mFalsingManager,
                 mUserSwitcherController, mFeatureFlags, mGlobalSettings,
                 mSessionTracker, Optional.of(mSideFpsController), mFalsingA11yDelegate,
-                mTelephonyManager, mViewMediatorCallback, mAudioManager);
+                mTelephonyManager, mViewMediatorCallback, mAudioManager,
+                mock(KeyguardFaceAuthInteractor.class));
     }
 
     @Test
@@ -228,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);
 
@@ -298,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),
@@ -312,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),
@@ -326,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),
@@ -340,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
@@ -453,7 +439,7 @@
         KeyguardSecurityContainer.SwipeListener registeredSwipeListener =
                 getRegisteredSwipeListener();
         when(mKeyguardUpdateMonitor.isFaceDetectionRunning()).thenReturn(false);
-        setupGetSecurityView();
+        setupGetSecurityView(SecurityMode.Password);
 
         registeredSwipeListener.onSwipeUp();
 
@@ -479,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
@@ -492,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
@@ -510,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
@@ -527,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
@@ -546,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
@@ -612,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();
     }
 
@@ -671,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
@@ -713,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 f1ee108..a2c6329 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java
@@ -16,7 +16,9 @@
 
 package com.android.keyguard;
 
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.AndroidTestingRunner;
@@ -25,6 +27,9 @@
 import com.android.keyguard.logging.KeyguardLogger;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.plugins.ClockConfig;
+import com.android.systemui.plugins.ClockController;
+import com.android.systemui.statusbar.notification.AnimatableProperty;
 import com.android.systemui.statusbar.phone.DozeParameters;
 import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -76,7 +81,16 @@
                 mScreenOffAnimationController,
                 mKeyguardLogger,
                 mFeatureFlags,
-                mInteractionJankMonitor);
+                mInteractionJankMonitor) {
+                    @Override
+                    void setProperty(
+                            AnimatableProperty property,
+                            float value,
+                            boolean animate) {
+                        // Route into the mock version for verification
+                        mControllerMock.setProperty(property, value, animate);
+                    }
+                };
     }
 
     @Test
@@ -111,4 +125,34 @@
         configurationListenerArgumentCaptor.getValue().onLocaleListChanged();
         verify(mKeyguardClockSwitchController).onLocaleListChanged();
     }
+
+    @Test
+    public void updatePosition_primaryClockAnimation() {
+        ClockController mockClock = mock(ClockController.class);
+        when(mKeyguardClockSwitchController.getClock()).thenReturn(mockClock);
+        when(mockClock.getConfig()).thenReturn(new ClockConfig(false, true));
+
+        mController.updatePosition(10, 15, 20f, true);
+
+        verify(mControllerMock).setProperty(AnimatableProperty.Y, 15f, true);
+        verify(mKeyguardClockSwitchController).updatePosition(
+                10, 20f, KeyguardStatusViewController.CLOCK_ANIMATION_PROPERTIES, true);
+        verify(mControllerMock).setProperty(AnimatableProperty.SCALE_X, 1f, true);
+        verify(mControllerMock).setProperty(AnimatableProperty.SCALE_Y, 1f, true);
+    }
+
+    @Test
+    public void updatePosition_alternateClockAnimation() {
+        ClockController mockClock = mock(ClockController.class);
+        when(mKeyguardClockSwitchController.getClock()).thenReturn(mockClock);
+        when(mockClock.getConfig()).thenReturn(new ClockConfig(true, true));
+
+        mController.updatePosition(10, 15, 20f, true);
+
+        verify(mControllerMock).setProperty(AnimatableProperty.Y, 15f, true);
+        verify(mKeyguardClockSwitchController).updatePosition(
+                10, 1f, KeyguardStatusViewController.CLOCK_ANIMATION_PROPERTIES, true);
+        verify(mControllerMock).setProperty(AnimatableProperty.SCALE_X, 20f, true);
+        verify(mControllerMock).setProperty(AnimatableProperty.SCALE_Y, 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/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
index 0978c82..9c36af3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
@@ -18,6 +18,7 @@
 
 import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
 import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
+import static android.content.res.Configuration.ORIENTATION_UNDEFINED;
 import static android.view.Choreographer.FrameCallback;
 import static android.view.MotionEvent.ACTION_DOWN;
 import static android.view.MotionEvent.ACTION_UP;
@@ -172,6 +173,12 @@
                 returnsSecondArg());
 
         mResources = getContext().getOrCreateTestableResources().getResources();
+        // prevent the config orientation from undefined, which may cause config.diff method
+        // neglecting the orientation update.
+        if (mResources.getConfiguration().orientation == ORIENTATION_UNDEFINED) {
+            mResources.getConfiguration().orientation = ORIENTATION_PORTRAIT;
+        }
+
         mWindowMagnificationAnimationController = new WindowMagnificationAnimationController(
                 mContext, mValueAnimator);
         mWindowMagnificationController =
@@ -688,7 +695,11 @@
 
     @Test
     public void enableWindowMagnification_rotationIsChanged_updateRotationValue() {
-        final Configuration config = mContext.getResources().getConfiguration();
+        // the config orientation should not be undefined, since it would cause config.diff
+        // returning 0 and thus the orientation changed would not be detected
+        assertNotEquals(ORIENTATION_UNDEFINED, mResources.getConfiguration().orientation);
+
+        final Configuration config = mResources.getConfiguration();
         config.orientation = config.orientation == ORIENTATION_LANDSCAPE ? ORIENTATION_PORTRAIT
                 : ORIENTATION_LANDSCAPE;
         final int newRotation = simulateRotateTheDevice();
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/animation/FontInterpolatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt
index 8a5c5b5..57a355f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt
@@ -106,4 +106,29 @@
         val reversedFont = interp.lerp(endFont, startFont, 0.5f)
         assertThat(resultFont).isSameInstanceAs(reversedFont)
     }
+
+    @Test
+    fun testCacheMaxSize() {
+        val interp = FontInterpolator()
+
+        val startFont = Font.Builder(sFont)
+                .setFontVariationSettings("'wght' 100")
+                .build()
+        val endFont = Font.Builder(sFont)
+                .setFontVariationSettings("'wght' 1")
+                .build()
+        val resultFont = interp.lerp(startFont, endFont, 0.5f)
+        for (i in 0..FONT_CACHE_MAX_ENTRIES + 1) {
+            val f1 = Font.Builder(sFont)
+                    .setFontVariationSettings("'wght' ${i * 100}")
+                    .build()
+            val f2 = Font.Builder(sFont)
+                    .setFontVariationSettings("'wght' $i")
+                    .build()
+            interp.lerp(f1, f2, 0.5f)
+        }
+
+        val cachedFont = interp.lerp(startFont, endFont, 0.5f)
+        assertThat(resultFont).isNotSameInstanceAs(cachedFont)
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/back/OnBackAnimationCallbackExtensionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/back/OnBackAnimationCallbackExtensionTest.kt
index 921f9a8..2b95973 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/animation/back/OnBackAnimationCallbackExtensionTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/animation/back/OnBackAnimationCallbackExtensionTest.kt
@@ -37,7 +37,13 @@
 
     @Test
     fun onBackProgressed_shouldInvoke_onBackProgress() {
-        val backEvent = BackEvent(0f, 0f, 0f, BackEvent.EDGE_LEFT)
+        val backEvent =
+            BackEvent(
+                /* touchX = */ 0f,
+                /* touchY = */ 0f,
+                /* progress = */ 0f,
+                /* swipeEdge = */ BackEvent.EDGE_LEFT
+            )
         onBackAnimationCallback.onBackStarted(backEvent)
 
         onBackAnimationCallback.onBackProgressed(backEvent)
@@ -47,7 +53,13 @@
 
     @Test
     fun onBackStarted_shouldInvoke_onBackStart() {
-        val backEvent = BackEvent(0f, 0f, 0f, BackEvent.EDGE_LEFT)
+        val backEvent =
+            BackEvent(
+                /* touchX = */ 0f,
+                /* touchY = */ 0f,
+                /* progress = */ 0f,
+                /* swipeEdge = */ BackEvent.EDGE_LEFT
+            )
 
         onBackAnimationCallback.onBackStarted(backEvent)
 
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 b4696e4..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() {
@@ -170,24 +170,16 @@
     }
 
     @Test
-    fun testFocusLossAfterRotating() {
+    fun testActionCancel_panelInteractionDetectorDisable() {
         val container = initializeFingerprintContainer()
-        waitForIdleSync()
-
-        val requestID = authContainer?.requestId ?: 0L
-
-        verify(callback).onDialogAnimatedIn(requestID)
-        container.onOrientationChanged()
-        container.onWindowFocusChanged(false)
-        waitForIdleSync()
-
-        verify(callback, never()).onDismissed(
-                eq(AuthDialogCallback.DISMISSED_USER_CANCELED),
-                eq<ByteArray?>(null), /* credentialAttestation */
-                eq(requestID)
+        container.mBiometricCallback.onAction(
+                AuthBiometricView.Callback.ACTION_USER_CANCELED
         )
+        waitForIdleSync()
+        verify(panelInteractionDetector).disable()
     }
 
+
     @Test
     fun testActionAuthenticated_sendsDismissedAuthenticated() {
         val container = initializeFingerprintContainer()
@@ -489,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/AuthDialogPanelInteractionDetectorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetectorTest.kt
index b41053c..ef750be 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetectorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthDialogPanelInteractionDetectorTest.kt
@@ -51,32 +51,37 @@
     @Test
     fun testEnableDetector_expandWithTrack_shouldPostRunnable() {
         detector.enable(action)
-        // simulate notification expand
-        shadeExpansionStateManager.onPanelExpansionChanged(5566f, true, true, 5566f)
+        shadeExpansionStateManager.onPanelExpansionChanged(1.0f, true, true, 0f)
         verify(action).run()
     }
 
     @Test
     fun testEnableDetector_trackOnly_shouldPostRunnable() {
         detector.enable(action)
-        // simulate notification expand
-        shadeExpansionStateManager.onPanelExpansionChanged(5566f, false, true, 5566f)
+        shadeExpansionStateManager.onPanelExpansionChanged(1.0f, false, true, 0f)
         verify(action).run()
     }
 
     @Test
     fun testEnableDetector_expandOnly_shouldPostRunnable() {
         detector.enable(action)
-        // simulate notification expand
-        shadeExpansionStateManager.onPanelExpansionChanged(5566f, true, false, 5566f)
+        shadeExpansionStateManager.onPanelExpansionChanged(1.0f, true, false, 0f)
         verify(action).run()
     }
 
     @Test
+    fun testEnableDetector_expandWithoutFraction_shouldPostRunnable() {
+        detector.enable(action)
+        // simulate headsup notification
+        shadeExpansionStateManager.onPanelExpansionChanged(0.0f, true, false, 0f)
+        verifyZeroInteractions(action)
+    }
+
+    @Test
     fun testEnableDetector_shouldNotPostRunnable() {
         detector.enable(action)
         detector.disable()
-        shadeExpansionStateManager.onPanelExpansionChanged(5566f, true, true, 5566f)
+        shadeExpansionStateManager.onPanelExpansionChanged(1.0f, true, true, 0f)
         verifyZeroInteractions(action)
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt
index 7d9ccb6..6b5679a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt
@@ -21,6 +21,7 @@
 import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
 import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper.RunWithLooper
+import android.util.DisplayMetrics
 import androidx.test.filters.SmallTest
 import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession
 import com.android.keyguard.KeyguardUpdateMonitor
@@ -35,7 +36,6 @@
 import com.android.systemui.statusbar.NotificationShadeWindowController
 import com.android.systemui.statusbar.commandline.CommandRegistry
 import com.android.systemui.statusbar.phone.BiometricUnlockController
-import com.android.systemui.statusbar.phone.CentralSurfaces
 import com.android.systemui.statusbar.policy.ConfigurationController
 import com.android.systemui.statusbar.policy.KeyguardStateController
 import com.android.systemui.util.leak.RotationUtils
@@ -66,7 +66,6 @@
     private lateinit var staticMockSession: MockitoSession
 
     private lateinit var controller: AuthRippleController
-    @Mock private lateinit var mCentralSurfaces: CentralSurfaces
     @Mock private lateinit var rippleView: AuthRippleView
     @Mock private lateinit var commandRegistry: CommandRegistry
     @Mock private lateinit var configurationController: ConfigurationController
@@ -92,6 +91,8 @@
     @Mock
     private lateinit var fpSensorProp: FingerprintSensorPropertiesInternal
 
+    private val displayMetrics = DisplayMetrics()
+
     @Captor
     private lateinit var biometricUnlockListener:
             ArgumentCaptor<BiometricUnlockController.BiometricUnlockEventsListener>
@@ -109,7 +110,6 @@
         `when`(udfpsControllerProvider.get()).thenReturn(udfpsController)
 
         controller = AuthRippleController(
-            mCentralSurfaces,
             context,
             authController,
             configurationController,
@@ -120,13 +120,14 @@
             notificationShadeWindowController,
             udfpsControllerProvider,
             statusBarStateController,
+            displayMetrics,
             featureFlags,
             KeyguardLogger(logcatLogBuffer(AuthRippleController.TAG)),
             biometricUnlockController,
+            lightRevealScrim,
             rippleView,
         )
         controller.init()
-        `when`(mCentralSurfaces.lightRevealScrim).thenReturn(lightRevealScrim)
     }
 
     @After
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 64c028e..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;
@@ -87,6 +87,7 @@
 import com.android.systemui.flags.Flags;
 import com.android.systemui.keyguard.ScreenLifecycle;
 import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor;
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
 import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerInteractor;
 import com.android.systemui.log.SessionTracker;
 import com.android.systemui.plugins.FalsingManager;
@@ -124,7 +125,7 @@
 import javax.inject.Provider;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 @RunWithLooper(setAsMainLooper = true)
 public class UdfpsControllerTest extends SysuiTestCase {
 
@@ -311,7 +312,8 @@
                 mUnlockedScreenOffAnimationController, mSystemUIDialogManager, mLatencyTracker,
                 mActivityLaunchAnimator, alternateTouchProvider, mBiometricExecutor,
                 mPrimaryBouncerInteractor, mSinglePointerTouchProcessor, mSessionTracker,
-                mAlternateBouncerInteractor, mSecureSettings, mInputManager, mUdfpsUtils);
+                mAlternateBouncerInteractor, mSecureSettings, mInputManager, mUdfpsUtils,
+                mock(KeyguardFaceAuthInteractor.class));
         verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
         mOverlayController = mOverlayCaptor.getValue();
         verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture());
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/controls/ui/ControlsPopupMenuTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsPopupMenuTest.kt
index 86e2bd3..df6fa11 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsPopupMenuTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsPopupMenuTest.kt
@@ -22,6 +22,7 @@
 import android.testing.AndroidTestingRunner
 import android.util.DisplayMetrics
 import android.view.View
+import android.view.ViewGroup
 import android.widget.PopupWindow.OnDismissListener
 import androidx.test.ext.junit.rules.ActivityScenarioRule
 import androidx.test.filters.SmallTest
@@ -29,13 +30,17 @@
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.activity.EmptyTestActivity
 import com.android.systemui.util.mockito.whenever
+import com.android.systemui.widget.FakeListAdapter
+import com.android.systemui.widget.FakeListAdapter.FakeListAdapterItem
 import com.google.common.truth.Truth.assertThat
+import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.Mockito.mock
 import org.mockito.Mockito.spy
 import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -52,10 +57,16 @@
 
     @Rule @JvmField val activityScenarioRule = ActivityScenarioRule(EmptyTestActivity::class.java)
 
-    private val testDisplayMetrics: DisplayMetrics = DisplayMetrics()
+    private val testDisplayMetrics = DisplayMetrics()
+
+    @Before
+    fun setup() {
+        MockitoAnnotations.initMocks(this)
+    }
 
     @Test
-    fun testDismissListenerWorks() = testPopup { popupMenu ->
+    fun testDismissListenerWorks() = testPopup { activity, popupMenu ->
+        popupMenu.setAdapter(FakeListAdapter())
         val listener = mock(OnDismissListener::class.java)
         popupMenu.setOnDismissListener(listener)
         popupMenu.show()
@@ -66,7 +77,9 @@
     }
 
     @Test
-    fun testPopupDoesntExceedMaxWidth() = testPopup { popupMenu ->
+    fun testPopupDoesntExceedMaxWidth() = testPopup { activity, popupMenu ->
+        popupMenu.setAdapter(FakeListAdapter())
+        popupMenu.width = ViewGroup.LayoutParams.MATCH_PARENT
         testDisplayMetrics.widthPixels = DISPLAY_WIDTH_WIDE
 
         popupMenu.show()
@@ -75,7 +88,9 @@
     }
 
     @Test
-    fun testPopupMarginsWidthLessMax() = testPopup { popupMenu ->
+    fun testPopupMarginsWidthLessMax() = testPopup { activity, popupMenu ->
+        popupMenu.setAdapter(FakeListAdapter())
+        popupMenu.width = ViewGroup.LayoutParams.MATCH_PARENT
         testDisplayMetrics.widthPixels = DISPLAY_WIDTH_NARROW
 
         popupMenu.show()
@@ -83,10 +98,32 @@
         assertThat(popupMenu.width).isEqualTo(DISPLAY_WIDTH_NARROW - 2 * HORIZONTAL_MARGIN)
     }
 
-    private fun testPopup(test: (popup: ControlsPopupMenu) -> Unit) {
+    @Test
+    fun testWrapContentDoesntExceedMax() = testPopup { activity, popupMenu ->
+        popupMenu.setAdapter(
+            FakeListAdapter(
+                listOf(
+                    FakeListAdapterItem({ _, _, _ ->
+                        View(activity).apply { minimumWidth = MAX_WIDTH + 1 }
+                    })
+                )
+            )
+        )
+        popupMenu.width = ViewGroup.LayoutParams.WRAP_CONTENT
+        testDisplayMetrics.widthPixels = DISPLAY_WIDTH_NARROW
+
+        popupMenu.show()
+
+        assertThat(popupMenu.width).isEqualTo(DISPLAY_WIDTH_NARROW - 2 * HORIZONTAL_MARGIN)
+    }
+
+    private fun testPopup(test: (activity: Activity, popup: ControlsPopupMenu) -> Unit) {
         activityScenarioRule.scenario.onActivity { activity ->
             val testActivity = setupActivity(activity)
-            test(ControlsPopupMenu(testActivity).apply { anchorView = View(testActivity) })
+            test(
+                testActivity,
+                ControlsPopupMenu(testActivity).apply { anchorView = View(testActivity) }
+            )
         }
     }
 
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/DreamOverlayTouchMonitorTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/DreamOverlayTouchMonitorTest.java
index 08427da..21397d97 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/DreamOverlayTouchMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/DreamOverlayTouchMonitorTest.java
@@ -269,6 +269,30 @@
     }
 
     @Test
+    public void testInputEventPropagationAfterRemoval() {
+        final DreamTouchHandler touchHandler = Mockito.mock(DreamTouchHandler.class);
+
+        final Environment environment = new Environment(Stream.of(touchHandler)
+                .collect(Collectors.toCollection(HashSet::new)));
+
+        final InputEvent initialEvent = Mockito.mock(InputEvent.class);
+        environment.publishInputEvent(initialEvent);
+
+        // Ensure session started
+        final DreamTouchHandler.TouchSession session = captureSession(touchHandler);
+        final InputChannelCompat.InputEventListener eventListener =
+                registerInputEventListener(session);
+
+        session.pop();
+        environment.executeAll();
+
+        final InputEvent event = Mockito.mock(InputEvent.class);
+        environment.publishInputEvent(event);
+
+        verify(eventListener, never()).onInputEvent(eq(event));
+    }
+
+    @Test
     public void testInputGesturePropagation() {
         final DreamTouchHandler touchHandler = Mockito.mock(DreamTouchHandler.class);
 
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/keyboard/data/repository/KeyboardRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyboard/data/repository/KeyboardRepositoryTest.kt
index f6ff4b2..6f9dedf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyboard/data/repository/KeyboardRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyboard/data/repository/KeyboardRepositoryTest.kt
@@ -96,6 +96,16 @@
         }
 
     @Test
+    fun emitsDisconnected_whenDeviceWithIdDoesNotExist() =
+        testScope.runTest {
+            val deviceListener = captureDeviceListener()
+            val isKeyboardConnected by collectLastValue(underTest.keyboardConnected)
+
+            deviceListener.onInputDeviceAdded(NULL_DEVICE_ID)
+            assertThat(isKeyboardConnected).isFalse()
+        }
+
+    @Test
     fun emitsDisconnected_whenKeyboardDisconnects() =
         testScope.runTest {
             val deviceListener = captureDeviceListener()
@@ -172,6 +182,7 @@
         private const val VIRTUAL_FULL_KEYBOARD_ID = 2
         private const val PHYSICAL_NOT_FULL_KEYBOARD_ID = 3
         private const val ANOTHER_PHYSICAL_FULL_KEYBOARD_ID = 4
+        private const val NULL_DEVICE_ID = 5
 
         private val INPUT_DEVICES_MAP: Map<Int, InputDevice> =
             mapOf(
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 2489e04..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
@@ -44,16 +45,20 @@
 import com.android.systemui.flags.Flags.FACE_AUTH_REFACTOR
 import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
 import com.android.systemui.keyguard.shared.model.AuthenticationStatus
 import com.android.systemui.keyguard.shared.model.DetectionStatus
 import com.android.systemui.keyguard.shared.model.ErrorAuthenticationStatus
 import com.android.systemui.keyguard.shared.model.HelpAuthenticationStatus
+import com.android.systemui.keyguard.shared.model.KeyguardState
 import com.android.systemui.keyguard.shared.model.SuccessAuthenticationStatus
+import com.android.systemui.keyguard.shared.model.TransitionStep
 import com.android.systemui.keyguard.shared.model.WakeSleepReason
 import com.android.systemui.keyguard.shared.model.WakefulnessModel
 import com.android.systemui.keyguard.shared.model.WakefulnessState
 import com.android.systemui.log.FaceAuthenticationLogger
 import com.android.systemui.log.SessionTracker
+import com.android.systemui.log.table.TableLogBuffer
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.statusbar.phone.FakeKeyguardStateController
 import com.android.systemui.statusbar.phone.KeyguardBypassController
@@ -61,10 +66,12 @@
 import com.android.systemui.util.mockito.KotlinArgumentCaptor
 import com.android.systemui.util.mockito.captureMany
 import com.android.systemui.util.mockito.whenever
+import com.android.systemui.util.time.FakeSystemClock
 import com.android.systemui.util.time.SystemClock
 import com.google.common.truth.Truth.assertThat
+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
@@ -88,8 +95,6 @@
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyNoMoreInteractions
 import org.mockito.MockitoAnnotations
-import java.io.PrintWriter
-import java.io.StringWriter
 
 @OptIn(ExperimentalCoroutinesApi::class)
 @SmallTest
@@ -117,6 +122,7 @@
     private lateinit var faceLockoutResetCallback: ArgumentCaptor<FaceManager.LockoutResetCallback>
     private lateinit var testDispatcher: TestDispatcher
 
+    private lateinit var keyguardTransitionRepository: FakeKeyguardTransitionRepository
     private lateinit var testScope: TestScope
     private lateinit var fakeUserRepository: FakeUserRepository
     private lateinit var authStatus: FlowValue<AuthenticationStatus?>
@@ -183,8 +189,14 @@
     private fun createDeviceEntryFaceAuthRepositoryImpl(
         fmOverride: FaceManager? = faceManager,
         bypassControllerOverride: KeyguardBypassController? = bypassController
-    ) =
-        DeviceEntryFaceAuthRepositoryImpl(
+    ): DeviceEntryFaceAuthRepositoryImpl {
+        val systemClock = FakeSystemClock()
+        val faceAuthBuffer = TableLogBuffer(10, "face auth", systemClock)
+        val faceDetectBuffer = TableLogBuffer(10, "face detect", systemClock)
+        keyguardTransitionRepository = FakeKeyguardTransitionRepository()
+        val keyguardTransitionInteractor =
+            KeyguardTransitionInteractor(keyguardTransitionRepository)
+        return DeviceEntryFaceAuthRepositoryImpl(
             mContext,
             fmOverride,
             fakeUserRepository,
@@ -200,8 +212,12 @@
             keyguardRepository,
             keyguardInteractor,
             alternateBouncerInteractor,
+            faceDetectBuffer,
+            faceAuthBuffer,
+            keyguardTransitionInteractor,
             dumpManager,
         )
+    }
 
     @Test
     fun faceAuthRunsAndProvidesAuthStatusUpdates() =
@@ -525,14 +541,6 @@
         }
 
     @Test
-    fun authenticateDoesNotRunWhenCurrentUserIsNotPrimary() =
-        testScope.runTest {
-            testGatingCheckForFaceAuth {
-                launch { fakeUserRepository.setSelectedUserInfo(secondaryUser) }
-            }
-        }
-
-    @Test
     fun authenticateDoesNotRunWhenSecureCameraIsActive() =
         testScope.runTest {
             testGatingCheckForFaceAuth {
@@ -636,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()
@@ -764,6 +824,70 @@
             }
         }
 
+    @Test
+    fun schedulesFaceManagerWatchdogWhenKeyguardIsGoneFromDozing() =
+        testScope.runTest {
+            keyguardTransitionRepository.sendTransitionStep(
+                TransitionStep(from = KeyguardState.DOZING, to = KeyguardState.GONE)
+            )
+
+            runCurrent()
+            verify(faceManager).scheduleWatchdog()
+        }
+
+    @Test
+    fun schedulesFaceManagerWatchdogWhenKeyguardIsGoneFromAod() =
+        testScope.runTest {
+            keyguardTransitionRepository.sendTransitionStep(
+                TransitionStep(from = KeyguardState.AOD, to = KeyguardState.GONE)
+            )
+
+            runCurrent()
+            verify(faceManager).scheduleWatchdog()
+        }
+
+    @Test
+    fun schedulesFaceManagerWatchdogWhenKeyguardIsGoneFromLockscreen() =
+        testScope.runTest {
+            keyguardTransitionRepository.sendTransitionStep(
+                TransitionStep(from = KeyguardState.LOCKSCREEN, to = KeyguardState.GONE)
+            )
+
+            runCurrent()
+            verify(faceManager).scheduleWatchdog()
+        }
+
+    @Test
+    fun schedulesFaceManagerWatchdogWhenKeyguardIsGoneFromBouncer() =
+        testScope.runTest {
+            keyguardTransitionRepository.sendTransitionStep(
+                TransitionStep(from = KeyguardState.PRIMARY_BOUNCER, to = KeyguardState.GONE)
+            )
+
+            runCurrent()
+            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
new file mode 100644
index 0000000..5da1a84
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt
@@ -0,0 +1,309 @@
+/*
+ *  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.keyguard.domain.interactor
+
+import android.os.Handler
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.keyguard.FaceAuthUiEvent
+import com.android.keyguard.KeyguardSecurityModel
+import com.android.keyguard.KeyguardUpdateMonitor
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.classifier.FalsingCollector
+import com.android.systemui.dump.logcatLogBuffer
+import com.android.systemui.flags.FakeFeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.keyguard.DismissCallbackRegistry
+import com.android.systemui.keyguard.data.BouncerView
+import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
+import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository
+import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFingerprintAuthRepository
+import com.android.systemui.keyguard.data.repository.FakeKeyguardBouncerRepository
+import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
+import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.keyguard.shared.model.TransitionStep
+import com.android.systemui.log.FaceAuthenticationLogger
+import com.android.systemui.plugins.statusbar.StatusBarStateController
+import com.android.systemui.statusbar.phone.KeyguardBypassController
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.android.systemui.util.time.FakeSystemClock
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestCoroutineScheduler
+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
+import org.mockito.Mock
+import org.mockito.Mockito.mock
+import org.mockito.MockitoAnnotations
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class KeyguardFaceAuthInteractorTest : SysuiTestCase() {
+
+    private lateinit var underTest: SystemUIKeyguardFaceAuthInteractor
+    private lateinit var testScope: TestScope
+    private lateinit var bouncerRepository: FakeKeyguardBouncerRepository
+    private lateinit var keyguardTransitionRepository: FakeKeyguardTransitionRepository
+    private lateinit var keyguardTransitionInteractor: KeyguardTransitionInteractor
+    private lateinit var faceAuthRepository: FakeDeviceEntryFaceAuthRepository
+
+    @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor
+
+    @Before
+    fun setup() {
+        MockitoAnnotations.initMocks(this)
+        val scheduler = TestCoroutineScheduler()
+        val dispatcher = StandardTestDispatcher(scheduler)
+        testScope = TestScope(dispatcher)
+        val featureFlags = FakeFeatureFlags()
+        featureFlags.set(Flags.FACE_AUTH_REFACTOR, true)
+        bouncerRepository = FakeKeyguardBouncerRepository()
+        faceAuthRepository = FakeDeviceEntryFaceAuthRepository()
+        keyguardTransitionRepository = FakeKeyguardTransitionRepository()
+        keyguardTransitionInteractor = KeyguardTransitionInteractor(keyguardTransitionRepository)
+
+        underTest =
+            SystemUIKeyguardFaceAuthInteractor(
+                testScope.backgroundScope,
+                dispatcher,
+                faceAuthRepository,
+                PrimaryBouncerInteractor(
+                    bouncerRepository,
+                    mock(BouncerView::class.java),
+                    mock(Handler::class.java),
+                    mock(KeyguardStateController::class.java),
+                    mock(KeyguardSecurityModel::class.java),
+                    mock(PrimaryBouncerCallbackInteractor::class.java),
+                    mock(FalsingCollector::class.java),
+                    mock(DismissCallbackRegistry::class.java),
+                    context,
+                    keyguardUpdateMonitor,
+                    mock(KeyguardBypassController::class.java),
+                ),
+                AlternateBouncerInteractor(
+                    mock(StatusBarStateController::class.java),
+                    mock(KeyguardStateController::class.java),
+                    bouncerRepository,
+                    mock(BiometricSettingsRepository::class.java),
+                    FakeDeviceEntryFingerprintAuthRepository(),
+                    FakeSystemClock(),
+                ),
+                keyguardTransitionInteractor,
+                featureFlags,
+                FaceAuthenticationLogger(logcatLogBuffer("faceAuthBuffer")),
+                keyguardUpdateMonitor,
+            )
+    }
+
+    @Test
+    fun faceAuthIsRequestedWhenLockscreenBecomesVisibleFromOffState() =
+        testScope.runTest {
+            underTest.start()
+
+            keyguardTransitionRepository.sendTransitionStep(
+                TransitionStep(
+                    KeyguardState.OFF,
+                    KeyguardState.LOCKSCREEN,
+                    transitionState = TransitionState.STARTED
+                )
+            )
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(
+                    Pair(FaceAuthUiEvent.FACE_AUTH_UPDATED_KEYGUARD_VISIBILITY_CHANGED, true)
+                )
+        }
+
+    @Test
+    fun faceAuthIsRequestedWhenLockscreenBecomesVisibleFromAodState() =
+        testScope.runTest {
+            underTest.start()
+
+            keyguardTransitionRepository.sendTransitionStep(
+                TransitionStep(
+                    KeyguardState.AOD,
+                    KeyguardState.LOCKSCREEN,
+                    transitionState = TransitionState.STARTED
+                )
+            )
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(
+                    Pair(FaceAuthUiEvent.FACE_AUTH_UPDATED_KEYGUARD_VISIBILITY_CHANGED, true)
+                )
+        }
+
+    @Test
+    fun faceAuthIsRequestedWhenLockscreenBecomesVisibleFromDozingState() =
+        testScope.runTest {
+            underTest.start()
+
+            keyguardTransitionRepository.sendTransitionStep(
+                TransitionStep(
+                    KeyguardState.DOZING,
+                    KeyguardState.LOCKSCREEN,
+                    transitionState = TransitionState.STARTED
+                )
+            )
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(
+                    Pair(FaceAuthUiEvent.FACE_AUTH_UPDATED_KEYGUARD_VISIBILITY_CHANGED, true)
+                )
+        }
+
+    @Test
+    fun faceAuthIsRequestedWhenPrimaryBouncerIsVisible() =
+        testScope.runTest {
+            underTest.start()
+
+            bouncerRepository.setPrimaryShow(false)
+            runCurrent()
+
+            bouncerRepository.setPrimaryShow(true)
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(Pair(FaceAuthUiEvent.FACE_AUTH_UPDATED_PRIMARY_BOUNCER_SHOWN, true))
+        }
+
+    @Test
+    fun faceAuthIsRequestedWhenAlternateBouncerIsVisible() =
+        testScope.runTest {
+            underTest.start()
+
+            bouncerRepository.setAlternateVisible(false)
+            runCurrent()
+
+            bouncerRepository.setAlternateVisible(true)
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(
+                    Pair(
+                        FaceAuthUiEvent.FACE_AUTH_TRIGGERED_ALTERNATE_BIOMETRIC_BOUNCER_SHOWN,
+                        false
+                    )
+                )
+        }
+
+    @Test
+    fun faceAuthIsRequestedWhenUdfpsSensorTouched() =
+        testScope.runTest {
+            underTest.start()
+
+            underTest.onUdfpsSensorTouched()
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(Pair(FaceAuthUiEvent.FACE_AUTH_TRIGGERED_UDFPS_POINTER_DOWN, false))
+        }
+
+    @Test
+    fun faceAuthIsRequestedWhenOnAssistantTriggeredOnLockScreen() =
+        testScope.runTest {
+            underTest.start()
+
+            underTest.onAssistantTriggeredOnLockScreen()
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(
+                    Pair(FaceAuthUiEvent.FACE_AUTH_UPDATED_ASSISTANT_VISIBILITY_CHANGED, true)
+                )
+        }
+
+    @Test
+    fun faceAuthIsRequestedWhenDeviceLifted() =
+        testScope.runTest {
+            underTest.start()
+
+            underTest.onDeviceLifted()
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(
+                    Pair(FaceAuthUiEvent.FACE_AUTH_TRIGGERED_PICK_UP_GESTURE_TRIGGERED, true)
+                )
+        }
+
+    @Test
+    fun faceAuthIsRequestedWhenQsExpansionStared() =
+        testScope.runTest {
+            underTest.start()
+
+            underTest.onQsExpansionStared()
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(Pair(FaceAuthUiEvent.FACE_AUTH_TRIGGERED_QS_EXPANDED, true))
+        }
+
+    @Test
+    fun faceAuthIsRequestedWhenNotificationPanelClicked() =
+        testScope.runTest {
+            underTest.start()
+
+            underTest.onNotificationPanelClicked()
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(
+                    Pair(FaceAuthUiEvent.FACE_AUTH_TRIGGERED_NOTIFICATION_PANEL_CLICKED, true)
+                )
+        }
+
+    @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()
+
+            underTest.onSwipeUpOnBouncer()
+
+            runCurrent()
+            assertThat(faceAuthRepository.runningAuthRequest.value)
+                .isEqualTo(Pair(FaceAuthUiEvent.FACE_AUTH_TRIGGERED_SWIPE_UP_ON_BOUNCER, false))
+        }
+}
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/controls/util/MediaDataUtilsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/util/MediaDataUtilsTest.kt
new file mode 100644
index 0000000..86f3062
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/util/MediaDataUtilsTest.kt
@@ -0,0 +1,75 @@
+/*
+ * 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.media.controls.util
+
+import android.testing.AndroidTestingRunner
+import android.util.Pair as APair
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class MediaDataUtilsTest : SysuiTestCase() {
+
+    @Test
+    fun testScaleFactor_zeroInput_returnsZero() {
+        val input = APair(0, 0)
+        val target = APair(100, 100)
+
+        val scale = MediaDataUtils.getScaleFactor(input, target)
+        assertThat(scale).isEqualTo(0f)
+    }
+
+    @Test
+    fun testScaleFactor_tooWide_scaleDown() {
+        val input = APair(400, 200)
+        val target = APair(100, 100)
+
+        val scale = MediaDataUtils.getScaleFactor(input, target)
+        assertThat(scale).isEqualTo(0.5f)
+    }
+
+    @Test
+    fun testScaleFactor_tooTall_scaleDown() {
+        val input = APair(200, 400)
+        val target = APair(100, 100)
+
+        val scale = MediaDataUtils.getScaleFactor(input, target)
+        assertThat(scale).isEqualTo(0.5f)
+    }
+
+    @Test
+    fun testScaleFactor_lessWide_scaleUp() {
+        val input = APair(50, 100)
+        val target = APair(100, 100)
+
+        val scale = MediaDataUtils.getScaleFactor(input, target)
+        assertThat(scale).isEqualTo(2f)
+    }
+
+    @Test
+    fun testScaleFactor_lessTall_scaleUp() {
+        val input = APair(100, 50)
+        val target = APair(100, 100)
+
+        val scale = MediaDataUtils.getScaleFactor(input, target)
+        assertThat(scale).isEqualTo(2f)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java
index 9a0bd9e..f206409 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java
@@ -255,10 +255,10 @@
                 mLocalBluetoothLeBroadcast);
         mIsBroadcasting = true;
 
-        mMediaOutputBaseDialogImpl.onStart();
+        mMediaOutputBaseDialogImpl.start();
         verify(mLocalBluetoothLeBroadcast).registerServiceCallBack(any(), any());
 
-        mMediaOutputBaseDialogImpl.onStop();
+        mMediaOutputBaseDialogImpl.stop();
         verify(mLocalBluetoothLeBroadcast).unregisterServiceCallBack(any());
     }
 
@@ -269,8 +269,8 @@
                 mLocalBluetoothLeBroadcast);
         mIsBroadcasting = false;
 
-        mMediaOutputBaseDialogImpl.onStart();
-        mMediaOutputBaseDialogImpl.onStop();
+        mMediaOutputBaseDialogImpl.start();
+        mMediaOutputBaseDialogImpl.stop();
 
         verify(mLocalBluetoothLeBroadcast, never()).registerServiceCallBack(any(), any());
         verify(mLocalBluetoothLeBroadcast, never()).unregisterServiceCallBack(any());
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/navigationbar/gestural/BackPanelControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/gestural/BackPanelControllerTest.kt
index 8e32f81..d9428f8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/gestural/BackPanelControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/gestural/BackPanelControllerTest.kt
@@ -124,7 +124,7 @@
         continueTouch(START_X + touchSlop.toFloat() + 1)
         continueTouch(
             START_X + touchSlop + triggerThreshold -
-                mBackPanelController.params.deactivationSwipeTriggerThreshold
+                mBackPanelController.params.deactivationTriggerThreshold
         )
         clearInvocations(backCallback)
         Thread.sleep(MIN_DURATION_ACTIVE_BEFORE_INACTIVE_ANIMATION)
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 ba29ca5..55f221d 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
@@ -63,8 +64,9 @@
 import org.junit.runner.RunWith
 import org.mockito.ArgumentMatchers.anyInt
 import org.mockito.Mock
-import org.mockito.Mockito.isNull
+import org.mockito.Mockito.doNothing
 import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyZeroInteractions
 import org.mockito.MockitoAnnotations
@@ -75,7 +77,9 @@
 internal class NoteTaskControllerTest : SysuiTestCase() {
 
     @Mock private lateinit var context: Context
+    @Mock private lateinit var workProfileContext: Context
     @Mock private lateinit var packageManager: PackageManager
+    @Mock private lateinit var workProfilePackageManager: PackageManager
     @Mock private lateinit var resolver: NoteTaskInfoResolver
     @Mock private lateinit var bubbles: Bubbles
     @Mock private lateinit var keyguardManager: KeyguardManager
@@ -94,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(
@@ -107,6 +111,7 @@
             .thenReturn(listOf(NOTE_TASK_PACKAGE_NAME))
         whenever(activityManager.getRunningTasks(anyInt())).thenReturn(emptyList())
         whenever(userManager.isManagedProfile(workUserInfo.id)).thenReturn(true)
+        whenever(context.resources).thenReturn(getContext().resources)
     }
 
     private fun createNoteTaskController(
@@ -137,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)
@@ -152,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)
@@ -167,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)
@@ -181,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)
@@ -203,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)
@@ -219,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(
@@ -251,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(
@@ -287,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))
 
@@ -313,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()
@@ -321,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)
     }
@@ -337,14 +344,14 @@
     }
 
     @Test
-    fun showNoteTask_intentResolverReturnsNull_shouldDoNothing() {
-        whenever(resolver.resolveInfo(any(), any())).thenReturn(null)
+    fun showNoteTask_intentResolverReturnsNull_shouldShowToast() {
+        whenever(resolver.resolveInfo(any(), any(), any())).thenReturn(null)
+        val noteTaskController = spy(createNoteTaskController())
+        doNothing().whenever(noteTaskController).showNoDefaultNotesAppToast()
 
-        createNoteTaskController()
-            .showNoteTask(
-                entryPoint = NoteTaskEntryPoint.TAIL_BUTTON,
-            )
+        noteTaskController.showNoteTask(entryPoint = NoteTaskEntryPoint.TAIL_BUTTON)
 
+        verify(noteTaskController).showNoDefaultNotesAppToast()
         verifyZeroInteractions(context, bubbles, eventLogger)
     }
 
@@ -373,17 +380,17 @@
     @Test
     fun showNoteTask_keyboardShortcut_shouldStartActivity() {
         val expectedInfo =
-                NOTE_TASK_INFO.copy(
-                        entryPoint = NoteTaskEntryPoint.KEYBOARD_SHORTCUT,
-                        isKeyguardLocked = true,
-                )
+            NOTE_TASK_INFO.copy(
+                entryPoint = NoteTaskEntryPoint.KEYBOARD_SHORTCUT,
+                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(
-                        entryPoint = expectedInfo.entryPoint!!,
-                )
+            .showNoteTask(
+                entryPoint = expectedInfo.entryPoint!!,
+            )
 
         val intentCaptor = argumentCaptor<Intent>()
         val userCaptor = argumentCaptor<UserHandle>()
@@ -393,9 +400,9 @@
             assertThat(intent.`package`).isEqualTo(NOTE_TASK_PACKAGE_NAME)
             assertThat(intent.flags and FLAG_ACTIVITY_NEW_TASK).isEqualTo(FLAG_ACTIVITY_NEW_TASK)
             assertThat(intent.flags and FLAG_ACTIVITY_MULTIPLE_TASK)
-                    .isEqualTo(FLAG_ACTIVITY_MULTIPLE_TASK)
+                .isEqualTo(FLAG_ACTIVITY_MULTIPLE_TASK)
             assertThat(intent.flags and FLAG_ACTIVITY_NEW_DOCUMENT)
-                    .isEqualTo(FLAG_ACTIVITY_NEW_DOCUMENT)
+                .isEqualTo(FLAG_ACTIVITY_NEW_DOCUMENT)
             assertThat(intent.getBooleanExtra(Intent.EXTRA_USE_STYLUS_MODE, true)).isFalse()
         }
         assertThat(userCaptor.value).isEqualTo(userTracker.userHandle)
@@ -407,7 +414,7 @@
     // region setNoteTaskShortcutEnabled
     @Test
     fun setNoteTaskShortcutEnabled_setTrue() {
-        createNoteTaskController().setNoteTaskShortcutEnabled(value = true)
+        createNoteTaskController().setNoteTaskShortcutEnabled(value = true, userTracker.userHandle)
 
         val argument = argumentCaptor<ComponentName>()
         verify(context.packageManager)
@@ -422,7 +429,7 @@
 
     @Test
     fun setNoteTaskShortcutEnabled_setFalse() {
-        createNoteTaskController().setNoteTaskShortcutEnabled(value = false)
+        createNoteTaskController().setNoteTaskShortcutEnabled(value = false, userTracker.userHandle)
 
         val argument = argumentCaptor<ComponentName>()
         verify(context.packageManager)
@@ -434,6 +441,47 @@
         assertThat(argument.value.className)
             .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name)
     }
+
+    @Test
+    fun setNoteTaskShortcutEnabled_workProfileUser_setTrue() {
+        whenever(context.createContextAsUser(eq(workUserInfo.userHandle), any()))
+            .thenReturn(workProfileContext)
+        whenever(workProfileContext.packageManager).thenReturn(workProfilePackageManager)
+        userTracker.set(mainAndWorkProfileUsers, mainAndWorkProfileUsers.indexOf(mainUserInfo))
+
+        createNoteTaskController().setNoteTaskShortcutEnabled(value = true, workUserInfo.userHandle)
+
+        val argument = argumentCaptor<ComponentName>()
+        verify(workProfilePackageManager)
+            .setComponentEnabledSetting(
+                argument.capture(),
+                eq(COMPONENT_ENABLED_STATE_ENABLED),
+                eq(PackageManager.DONT_KILL_APP),
+            )
+        assertThat(argument.value.className)
+            .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name)
+    }
+
+    @Test
+    fun setNoteTaskShortcutEnabled_workProfileUser_setFalse() {
+        whenever(context.createContextAsUser(eq(workUserInfo.userHandle), any()))
+            .thenReturn(workProfileContext)
+        whenever(workProfileContext.packageManager).thenReturn(workProfilePackageManager)
+        userTracker.set(mainAndWorkProfileUsers, mainAndWorkProfileUsers.indexOf(mainUserInfo))
+
+        createNoteTaskController()
+            .setNoteTaskShortcutEnabled(value = false, workUserInfo.userHandle)
+
+        val argument = argumentCaptor<ComponentName>()
+        verify(workProfilePackageManager)
+            .setComponentEnabledSetting(
+                argument.capture(),
+                eq(COMPONENT_ENABLED_STATE_DISABLED),
+                eq(PackageManager.DONT_KILL_APP),
+            )
+        assertThat(argument.value.className)
+            .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name)
+    }
     // endregion
 
     // region keyguard policy
@@ -557,16 +605,53 @@
 
     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 onRoleHoldersChanged
+    @Test
+    fun onRoleHoldersChanged_notNotesRole_doNothing() {
+        val user = UserHandle.of(0)
+
+        createNoteTaskController(isEnabled = true).onRoleHoldersChanged("NOT_NOTES", user)
+
+        verifyZeroInteractions(context)
+    }
+
+    @Test
+    fun onRoleHoldersChanged_notesRole_sameUser_shouldUpdateShortcuts() {
+        val user = userTracker.userHandle
+        val controller = spy(createNoteTaskController())
+        doNothing().whenever(controller).updateNoteTaskAsUser(any())
+
+        controller.onRoleHoldersChanged(ROLE_NOTES, user)
+
+        verify(controller).updateNoteTaskAsUser(user)
+    }
+
+    @Test
+    fun onRoleHoldersChanged_notesRole_differentUser_shouldUpdateShortcutsInUserProcess() {
+        // FakeUserTracker will default to UserHandle.SYSTEM.
+        val user = UserHandle.CURRENT
+
+        createNoteTaskController(isEnabled = true).onRoleHoldersChanged(ROLE_NOTES, user)
+
+        verify(context).startServiceAsUser(any(), eq(user))
+    }
+    // endregion
+
     // region updateNoteTaskAsUser
     @Test
     fun updateNoteTaskAsUser_withNotesRole_withShortcuts_shouldUpdateShortcuts() {
@@ -665,6 +750,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/notetask/NoteTaskInitializerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInitializerTest.kt
index ec4daee..28ed9d2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInitializerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInitializerTest.kt
@@ -20,9 +20,11 @@
 import android.view.KeyEvent
 import androidx.test.runner.AndroidJUnit4
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.settings.FakeUserTracker
 import com.android.systemui.statusbar.CommandQueue
 import com.android.systemui.util.concurrency.FakeExecutor
 import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.eq
 import com.android.systemui.util.time.FakeSystemClock
 import com.android.wm.shell.bubbles.Bubbles
 import java.util.Optional
@@ -46,6 +48,7 @@
     @Mock lateinit var roleManager: RoleManager
     private val clock = FakeSystemClock()
     private val executor = FakeExecutor(clock)
+    private val userTracker = FakeUserTracker()
 
     @Before
     fun setUp() {
@@ -63,6 +66,7 @@
             isEnabled = isEnabled,
             roleManager = roleManager,
             backgroundExecutor = executor,
+            userTracker = userTracker,
         )
     }
 
@@ -71,7 +75,7 @@
     fun initialize() {
         createNoteTaskInitializer().initialize()
 
-        verify(controller).setNoteTaskShortcutEnabled(true)
+        verify(controller).setNoteTaskShortcutEnabled(eq(true), eq(userTracker.userHandle))
         verify(commandQueue).addCallback(any())
         verify(roleManager).addOnRoleHoldersChangedListenerAsUser(any(), any(), any())
     }
@@ -80,7 +84,7 @@
     fun initialize_flagDisabled() {
         createNoteTaskInitializer(isEnabled = false).initialize()
 
-        verify(controller, never()).setNoteTaskShortcutEnabled(any())
+        verify(controller, never()).setNoteTaskShortcutEnabled(any(), any())
         verify(commandQueue, never()).addCallback(any())
         verify(roleManager, never()).addOnRoleHoldersChangedListenerAsUser(any(), any(), any())
     }
@@ -89,7 +93,7 @@
     fun initialize_bubblesNotPresent() {
         createNoteTaskInitializer(bubbles = null).initialize()
 
-        verify(controller, never()).setNoteTaskShortcutEnabled(any())
+        verify(controller, never()).setNoteTaskShortcutEnabled(any(), any())
         verify(commandQueue, never()).addCallback(any())
         verify(roleManager, never()).addOnRoleHoldersChangedListenerAsUser(any(), any(), any())
     }
@@ -98,24 +102,36 @@
     // region handleSystemKey
     @Test
     fun handleSystemKey_receiveValidSystemKey_shouldShowNoteTask() {
-        createNoteTaskInitializer().callbacks.handleSystemKey(KeyEvent(KeyEvent.ACTION_DOWN,
-                KeyEvent.KEYCODE_STYLUS_BUTTON_TAIL))
+        createNoteTaskInitializer()
+            .callbacks
+            .handleSystemKey(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_STYLUS_BUTTON_TAIL))
 
         verify(controller).showNoteTask(entryPoint = NoteTaskEntryPoint.TAIL_BUTTON)
     }
 
     @Test
     fun handleSystemKey_receiveKeyboardShortcut_shouldShowNoteTask() {
-        createNoteTaskInitializer().callbacks.handleSystemKey(KeyEvent(0, 0, KeyEvent.ACTION_DOWN,
-                KeyEvent.KEYCODE_N, 0, KeyEvent.META_META_ON or KeyEvent.META_CTRL_ON))
+        createNoteTaskInitializer()
+            .callbacks
+            .handleSystemKey(
+                KeyEvent(
+                    0,
+                    0,
+                    KeyEvent.ACTION_DOWN,
+                    KeyEvent.KEYCODE_N,
+                    0,
+                    KeyEvent.META_META_ON or KeyEvent.META_CTRL_ON
+                )
+            )
 
         verify(controller).showNoteTask(entryPoint = NoteTaskEntryPoint.KEYBOARD_SHORTCUT)
     }
-    
+
     @Test
     fun handleSystemKey_receiveInvalidSystemKey_shouldDoNothing() {
-        createNoteTaskInitializer().callbacks.handleSystemKey(KeyEvent(KeyEvent.ACTION_DOWN,
-                KeyEvent.KEYCODE_UNKNOWN))
+        createNoteTaskInitializer()
+            .callbacks
+            .handleSystemKey(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_UNKNOWN))
 
         verifyZeroInteractions(controller)
     }
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/QSTileHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
index aa92177..e4d8b25 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
@@ -46,7 +46,6 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.UiEventLogger;
 import com.android.internal.util.CollectionUtils;
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
@@ -117,8 +116,6 @@
     @Mock
     private CustomTile mCustomTile;
     @Mock
-    private UiEventLogger mUiEventLogger;
-    @Mock
     private UserTracker mUserTracker;
     private SecureSettings mSecureSettings;
     @Mock
@@ -164,7 +161,7 @@
         saveSetting("");
         mQSTileHost = new TestQSTileHost(mContext, mDefaultFactory, mMainExecutor,
                 mPluginManager, mTunerService, mAutoTiles, mCentralSurfaces,
-                mQSLogger, mUiEventLogger, mUserTracker, mSecureSettings, mCustomTileStatePersister,
+                mQSLogger, mUserTracker, mSecureSettings, mCustomTileStatePersister,
                 mTileLifecycleManagerFactory, mUserFileManager, mFeatureFlags);
 
         mSecureSettings.registerContentObserverForUser(SETTING, new ContentObserver(null) {
@@ -684,14 +681,14 @@
                 QSFactory defaultFactory, Executor mainExecutor,
                 PluginManager pluginManager, TunerService tunerService,
                 Provider<AutoTileManager> autoTiles,
-                CentralSurfaces centralSurfaces, QSLogger qsLogger, UiEventLogger uiEventLogger,
+                CentralSurfaces centralSurfaces, QSLogger qsLogger,
                 UserTracker userTracker, SecureSettings secureSettings,
                 CustomTileStatePersister customTileStatePersister,
                 TileLifecycleManager.Factory tileLifecycleManagerFactory,
                 UserFileManager userFileManager, FeatureFlags featureFlags) {
             super(context, defaultFactory, mainExecutor, pluginManager,
                     tunerService, autoTiles,  Optional.of(centralSurfaces), qsLogger,
-                    uiEventLogger, userTracker, secureSettings, customTileStatePersister,
+                    userTracker, secureSettings, customTileStatePersister,
                     tileLifecycleManagerFactory, userFileManager, featureFlags);
         }
 
@@ -710,6 +707,7 @@
         protected TestTile(QSHost host) {
             super(
                     host,
+                    mock(QsEventLogger.class),
                     mock(Looper.class),
                     mock(Handler.class),
                     new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QsEventLoggerFake.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QsEventLoggerFake.kt
new file mode 100644
index 0000000..40aa260
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QsEventLoggerFake.kt
@@ -0,0 +1,35 @@
+/*
+ * 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.internal.logging.InstanceId
+import com.android.internal.logging.UiEventLogger
+import com.android.internal.logging.testing.UiEventLoggerFake
+import com.android.systemui.InstanceIdSequenceFake
+
+class QsEventLoggerFake(
+    uiEventLogger: UiEventLoggerFake,
+    private val instanceIdSequence: InstanceIdSequenceFake,
+) : QsEventLogger, UiEventLogger by uiEventLogger {
+
+    val lastInstanceId: Int
+        get() = instanceIdSequence.lastInstanceId
+
+    override fun getNewInstanceId(): InstanceId {
+        return instanceIdSequence.newInstanceId()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt
index ac106ef..198ed4a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/CustomTileTest.kt
@@ -41,6 +41,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.settings.FakeDisplayTracker
 import com.android.systemui.util.mockito.any
@@ -56,12 +57,12 @@
 import org.mockito.ArgumentMatchers.anyInt
 import org.mockito.ArgumentMatchers.anyString
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.clearInvocations
 import org.mockito.Mockito.mock
 import org.mockito.Mockito.never
 import org.mockito.Mockito.reset
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
 
 @SmallTest
@@ -89,6 +90,7 @@
     @Mock private lateinit var applicationInfo: ApplicationInfo
     @Mock private lateinit var serviceInfo: ServiceInfo
     @Mock private lateinit var customTileStatePersister: CustomTileStatePersister
+    @Mock private lateinit var uiEventLogger: QsEventLogger
 
     private var displayTracker = FakeDisplayTracker(mContext)
     private lateinit var customTile: CustomTile
@@ -115,6 +117,7 @@
 
         customTileBuilder = CustomTile.Builder(
                 { tileHost },
+                uiEventLogger,
                 testableLooper.looper,
                 Handler(testableLooper.looper),
                 FalsingManagerFake(),
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/qs/tileimpl/QSTileImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
index 36549fb..962b537 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java
@@ -61,6 +61,7 @@
 import com.android.internal.logging.UiEventLogger;
 import com.android.internal.logging.testing.UiEventLoggerFake;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+import com.android.systemui.InstanceIdSequenceFake;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.classifier.FalsingManagerFake;
 import com.android.systemui.plugins.ActivityStarter;
@@ -69,6 +70,8 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSEvent;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
+import com.android.systemui.qs.QsEventLoggerFake;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.statusbar.StatusBarState;
 
@@ -106,7 +109,8 @@
     private ActivityStarter mActivityStarter;
 
     private UiEventLoggerFake mUiEventLoggerFake;
-    private InstanceId mInstanceId = InstanceId.fakeInstanceId(5);
+    private QsEventLoggerFake mQsEventLoggerFake;
+    private InstanceId mInstanceId;
 
     @Captor
     private ArgumentCaptor<LogMaker> mLogCaptor;
@@ -115,18 +119,29 @@
     public void setup() throws Exception {
         MockitoAnnotations.initMocks(this);
         mTestableLooper = TestableLooper.get(this);
+
         mUiEventLoggerFake = new UiEventLoggerFake();
+        mQsEventLoggerFake =
+                new QsEventLoggerFake(mUiEventLoggerFake, new InstanceIdSequenceFake(10));
         when(mHost.indexOf(SPEC)).thenReturn(POSITION);
         when(mHost.getContext()).thenReturn(mContext);
-        when(mHost.getUiEventLogger()).thenReturn(mUiEventLoggerFake);
-        when(mHost.getNewInstanceId()).thenReturn(mInstanceId);
 
         Handler mainHandler = new Handler(mTestableLooper.getLooper());
 
-        mTile = new TileImpl(mHost, mTestableLooper.getLooper(), mainHandler, mFalsingManager,
-                mMetricsLogger, mStatusBarStateController, mActivityStarter, mQsLogger);
+        mTile = new TileImpl(
+                mHost,
+                mQsEventLoggerFake,
+                mTestableLooper.getLooper(),
+                mainHandler,
+                mFalsingManager,
+                mMetricsLogger,
+                mStatusBarStateController,
+                mActivityStarter,
+                mQsLogger
+        );
         mTile.initialize();
         mTestableLooper.processAllMessages();
+        mInstanceId = InstanceId.fakeInstanceId(mQsEventLoggerFake.getLastInstanceId());
 
         mTile.setTileSpec(SPEC);
     }
@@ -507,6 +522,7 @@
 
         protected TileImpl(
                 QSHost host,
+                QsEventLogger uiEventLogger,
                 Looper backgroundLooper,
                 Handler mainHandler,
                 FalsingManager falsingManager,
@@ -515,7 +531,7 @@
                 ActivityStarter activityStarter,
                 QSLogger qsLogger
         ) {
-            super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+            super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                     statusBarStateController, activityStarter, qsLogger);
             getState().state = Tile.STATE_ACTIVE;
         }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AirplaneModeTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AirplaneModeTileTest.kt
index 5e0190b..c60cecb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AirplaneModeTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AirplaneModeTileTest.kt
@@ -22,8 +22,6 @@
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.UiEventLogger
-import com.android.internal.logging.testing.UiEventLoggerFake
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.broadcast.BroadcastDispatcher
@@ -32,6 +30,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.settings.UserTracker
@@ -68,20 +67,21 @@
     private lateinit var mGlobalSettings: GlobalSettings
     @Mock
     private lateinit var mUserTracker: UserTracker
+    @Mock
+    private lateinit var mUiEventLogger: QsEventLogger
     private lateinit var mTestableLooper: TestableLooper
     private lateinit var mTile: AirplaneModeTile
 
-    private val mUiEventLogger: UiEventLogger = UiEventLoggerFake()
-
     @Before
     fun setUp() {
         MockitoAnnotations.initMocks(this)
         mTestableLooper = TestableLooper.get(this)
         Mockito.`when`(mHost.context).thenReturn(mContext)
-        Mockito.`when`(mHost.uiEventLogger).thenReturn(mUiEventLogger)
         Mockito.`when`(mHost.userContext).thenReturn(mContext)
 
-        mTile = AirplaneModeTile(mHost,
+        mTile = AirplaneModeTile(
+            mHost,
+            mUiEventLogger,
             mTestableLooper.looper,
             Handler(mTestableLooper.looper),
             FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AlarmTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AlarmTileTest.kt
index f1e3e8a..52b8455 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AlarmTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AlarmTileTest.kt
@@ -9,12 +9,12 @@
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.UiEventLogger
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.classifier.FalsingManagerFake
 import com.android.systemui.plugins.ActivityStarter
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.settings.UserTracker
 import com.android.systemui.statusbar.policy.NextAlarmController
@@ -28,8 +28,8 @@
 import org.mockito.ArgumentCaptor
 import org.mockito.Captor
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
 
 @SmallTest
@@ -52,7 +52,7 @@
     @Mock
     private lateinit var nextAlarmController: NextAlarmController
     @Mock
-    private lateinit var uiEventLogger: UiEventLogger
+    private lateinit var uiEventLogger: QsEventLogger
     @Mock
     private lateinit var pendingIntent: PendingIntent
     @Captor
@@ -67,10 +67,10 @@
         testableLooper = TestableLooper.get(this)
 
         `when`(qsHost.context).thenReturn(mContext)
-        `when`(qsHost.uiEventLogger).thenReturn(uiEventLogger)
 
         tile = AlarmTile(
             qsHost,
+            uiEventLogger,
             testableLooper.looper,
             Handler(testableLooper.looper),
             FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BatterySaverTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BatterySaverTileTest.kt
index a5c0004..ff6814c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BatterySaverTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BatterySaverTileTest.kt
@@ -31,6 +31,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.BatteryController
@@ -43,10 +44,10 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.clearInvocations
 import org.mockito.Mockito.never
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
 
 @RunWith(AndroidTestingRunner::class)
@@ -63,6 +64,8 @@
     @Mock
     private lateinit var qsHost: QSHost
     @Mock
+    private lateinit var uiEventLogger: QsEventLogger
+    @Mock
     private lateinit var metricsLogger: MetricsLogger
     @Mock
     private lateinit var statusBarStateController: StatusBarStateController
@@ -90,6 +93,7 @@
 
         tile = BatterySaverTile(
                 qsHost,
+                uiEventLogger,
                 testableLooper.looper,
                 Handler(testableLooper.looper),
                 FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt
index 2e77de2..5e7f68c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt
@@ -9,7 +9,6 @@
 import android.testing.TestableLooper.RunWithLooper
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.testing.UiEventLoggerFake
 import com.android.settingslib.Utils
 import com.android.settingslib.bluetooth.CachedBluetoothDevice
 import com.android.systemui.R
@@ -20,6 +19,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.BluetoothController
@@ -49,8 +49,8 @@
     @Mock private lateinit var statusBarStateController: StatusBarStateController
     @Mock private lateinit var activityStarter: ActivityStarter
     @Mock private lateinit var bluetoothController: BluetoothController
+    @Mock private lateinit var uiEventLogger: QsEventLogger
 
-    private val uiEventLogger = UiEventLoggerFake()
     private lateinit var testableLooper: TestableLooper
     private lateinit var tile: FakeBluetoothTile
 
@@ -60,11 +60,11 @@
         testableLooper = TestableLooper.get(this)
 
         whenever(qsHost.context).thenReturn(mContext)
-        whenever(qsHost.uiEventLogger).thenReturn(uiEventLogger)
 
         tile =
             FakeBluetoothTile(
                 qsHost,
+                uiEventLogger,
                 testableLooper.looper,
                 Handler(testableLooper.looper),
                 falsingManager,
@@ -211,6 +211,7 @@
 
     private class FakeBluetoothTile(
         qsHost: QSHost,
+        uiEventLogger: QsEventLogger,
         backgroundLooper: Looper,
         mainHandler: Handler,
         falsingManager: FalsingManager,
@@ -222,6 +223,7 @@
     ) :
         BluetoothTile(
             qsHost,
+            uiEventLogger,
             backgroundLooper,
             mainHandler,
             falsingManager,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt
index 4193854..70d82fd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt
@@ -21,8 +21,6 @@
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.UiEventLogger
-import com.android.internal.logging.testing.UiEventLoggerFake
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.classifier.FalsingManagerFake
@@ -30,6 +28,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLoggerFake
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController
@@ -67,19 +66,21 @@
     private lateinit var privacyController: IndividualSensorPrivacyController
     @Mock
     private lateinit var keyguardStateController: KeyguardStateController
+    @Mock
+    private lateinit var uiEventLogger: QsEventLoggerFake
 
     private lateinit var testableLooper: TestableLooper
     private lateinit var tile: CameraToggleTile
-    private val uiEventLogger: UiEventLogger = UiEventLoggerFake()
 
     @Before
     fun setUp() {
         MockitoAnnotations.initMocks(this)
         testableLooper = TestableLooper.get(this)
         whenever(host.context).thenReturn(mContext)
-        whenever(host.uiEventLogger).thenReturn(uiEventLogger)
 
-        tile = CameraToggleTile(host,
+        tile = CameraToggleTile(
+                host,
+                uiEventLogger,
                 testableLooper.looper,
                 Handler(testableLooper.looper),
                 metricsLogger,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
index 64fd09d5..93ed994 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
@@ -43,6 +43,7 @@
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.statusbar.connectivity.IconState;
 import com.android.systemui.statusbar.connectivity.NetworkController;
@@ -94,6 +95,8 @@
     private QSLogger mQSLogger;
     @Mock
     private DialogLaunchAnimator mDialogLaunchAnimator;
+    @Mock
+    private QsEventLogger mUiEventLogger;
 
     private TestableLooper mTestableLooper;
     private CastTile mCastTile;
@@ -107,6 +110,7 @@
 
         mCastTile = new CastTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorCorrectionTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorCorrectionTileTest.java
index 13c30e9..2250ef3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorCorrectionTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorCorrectionTileTest.java
@@ -32,12 +32,12 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.UiEventLogger;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.classifier.FalsingManagerFake;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.settings.UserTracker;
 import com.android.systemui.util.settings.FakeSettings;
@@ -67,7 +67,7 @@
     @Mock
     private QSLogger mQSLogger;
     @Mock
-    private UiEventLogger mUiEventLogger;
+    private QsEventLogger mUiEventLogger;
     @Mock
     private UserTracker mUserTracker;
 
@@ -83,10 +83,10 @@
         mTestableLooper = TestableLooper.get(this);
 
         when(mHost.getContext()).thenReturn(mContext);
-        when(mHost.getUiEventLogger()).thenReturn(mUiEventLogger);
 
         mTile = new ColorCorrectionTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorInversionTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorInversionTileTest.java
index ff27e02..2e02bbe 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorInversionTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ColorInversionTileTest.java
@@ -32,7 +32,6 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.UiEventLogger;
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.classifier.FalsingManagerFake;
@@ -40,6 +39,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.settings.UserTracker;
@@ -72,7 +72,7 @@
     @Mock
     private QSLogger mQSLogger;
     @Mock
-    private UiEventLogger mUiEventLogger;
+    private QsEventLogger mUiEventLogger;
     @Mock
     private UserTracker mUserTracker;
 
@@ -88,10 +88,10 @@
         mTestableLooper = TestableLooper.get(this);
 
         when(mHost.getContext()).thenReturn(mContext);
-        when(mHost.getUiEventLogger()).thenReturn(mUiEventLogger);
 
         mTile = new ColorInversionTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt
index b048643..176b33f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt
@@ -21,7 +21,6 @@
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.testing.UiEventLoggerFake
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.animation.DialogLaunchAnimator
@@ -30,6 +29,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.DataSaverController
@@ -57,8 +57,8 @@
     @Mock private lateinit var activityStarter: ActivityStarter
     @Mock private lateinit var dataSaverController: DataSaverController
     @Mock private lateinit var dialogLaunchAnimator: DialogLaunchAnimator
+    @Mock private lateinit var uiEventLogger: QsEventLogger
 
-    private val uiEventLogger = UiEventLoggerFake()
     private lateinit var testableLooper: TestableLooper
     private lateinit var tile: DataSaverTile
 
@@ -68,11 +68,11 @@
         testableLooper = TestableLooper.get(this)
 
         Mockito.`when`(mHost.context).thenReturn(mContext)
-        Mockito.`when`(mHost.uiEventLogger).thenReturn(uiEventLogger)
 
         tile =
             DataSaverTile(
                 mHost,
+                uiEventLogger,
                 testableLooper.looper,
                 Handler(testableLooper.looper),
                 falsingManager,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
index b51c378..1346069 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
@@ -27,7 +27,6 @@
 import androidx.lifecycle.LifecycleOwner
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.UiEventLogger
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.animation.ActivityLaunchAnimator
@@ -44,6 +43,7 @@
 import com.android.systemui.plugins.ActivityStarter
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.util.mockito.any
@@ -52,6 +52,7 @@
 import com.android.systemui.util.settings.FakeSettings
 import com.android.systemui.util.settings.SecureSettings
 import com.google.common.truth.Truth.assertThat
+import org.junit.After
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -59,15 +60,14 @@
 import org.mockito.ArgumentMatchers.anyBoolean
 import org.mockito.Captor
 import org.mockito.Mock
-import org.mockito.MockitoAnnotations
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.doNothing
 import org.mockito.Mockito.nullable
 import org.mockito.Mockito.spy
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyZeroInteractions
+import org.mockito.Mockito.`when`
+import org.mockito.MockitoAnnotations
 import java.util.Optional
-import org.junit.After
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -95,7 +95,7 @@
     @Mock
     private lateinit var serviceInfo: ControlsServiceInfo
     @Mock
-    private lateinit var uiEventLogger: UiEventLogger
+    private lateinit var uiEventLogger: QsEventLogger
     @Captor
     private lateinit var listingCallbackCaptor:
             ArgumentCaptor<ControlsListingController.ControlsListingCallback>
@@ -118,7 +118,6 @@
         spiedContext = spy(mContext)
         doNothing().`when`(spiedContext).startActivity(any(Intent::class.java))
         `when`(qsHost.context).thenReturn(spiedContext)
-        `when`(qsHost.uiEventLogger).thenReturn(uiEventLogger)
         `when`(controlsComponent.isEnabled()).thenReturn(true)
         `when`(controlsController.getPreferredSelection())
                 .thenReturn(SelectedItem.StructureItem(
@@ -399,6 +398,7 @@
     private fun createTile(): DeviceControlsTile {
         return DeviceControlsTile(
                 qsHost,
+                uiEventLogger,
                 testableLooper.looper,
                 Handler(testableLooper.looper),
                 FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt
index 6c0904e..f0e4e3a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DndTileTest.kt
@@ -28,7 +28,6 @@
 import android.view.View
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.UiEventLogger
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.animation.DialogLaunchAnimator
@@ -37,6 +36,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.ZenModeController
@@ -46,7 +46,6 @@
 import com.android.systemui.util.settings.FakeSettings
 import com.android.systemui.util.settings.SecureSettings
 import com.google.common.truth.Truth.assertThat
-import java.io.File
 import org.junit.After
 import org.junit.Before
 import org.junit.Test
@@ -55,8 +54,9 @@
 import org.mockito.Mockito.anyBoolean
 import org.mockito.Mockito.never
 import org.mockito.Mockito.verify
-import org.mockito.Mockito.`when` as whenever
 import org.mockito.MockitoAnnotations
+import java.io.File
+import org.mockito.Mockito.`when` as whenever
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -84,7 +84,7 @@
     private lateinit var qsLogger: QSLogger
 
     @Mock
-    private lateinit var uiEventLogger: UiEventLogger
+    private lateinit var uiEventLogger: QsEventLogger
 
     @Mock
     private lateinit var zenModeController: ZenModeController
@@ -109,7 +109,6 @@
         secureSettings = FakeSettings()
 
         whenever(qsHost.userId).thenReturn(DEFAULT_USER)
-        whenever(qsHost.uiEventLogger).thenReturn(uiEventLogger)
 
         val wrappedContext = object : ContextWrapper(context) {
             override fun getSharedPreferences(file: File?, mode: Int): SharedPreferences {
@@ -120,6 +119,7 @@
 
         tile = DndTile(
             qsHost,
+            uiEventLogger,
             testableLooper.looper,
             Handler(testableLooper.looper),
             FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java
index 7d41aa6..f231c6e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java
@@ -48,6 +48,7 @@
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.settings.UserTracker;
@@ -83,6 +84,8 @@
     private BroadcastDispatcher mBroadcastDispatcher;
     @Mock
     private UserTracker mUserTracker;
+    @Mock
+    private QsEventLogger mUiEventLogger;
 
     private TestableLooper mTestableLooper;
 
@@ -258,6 +261,7 @@
             boolean dreamOnlyEnabledForSystemUser) {
         return new DreamTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FlashlightTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FlashlightTileTest.kt
index 692a644..73aa699 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FlashlightTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FlashlightTileTest.kt
@@ -6,7 +6,6 @@
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.testing.UiEventLoggerFake
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.classifier.FalsingManagerFake
@@ -14,6 +13,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.FlashlightController
@@ -45,7 +45,8 @@
 
     @Mock private lateinit var flashlightController: FlashlightController
 
-    private val uiEventLogger = UiEventLoggerFake()
+    @Mock private lateinit var uiEventLogger: QsEventLogger
+
     private val falsingManager = FalsingManagerFake()
     private lateinit var testableLooper: TestableLooper
     private lateinit var tile: FlashlightTile
@@ -56,11 +57,11 @@
         testableLooper = TestableLooper.get(this)
 
         Mockito.`when`(qsHost.context).thenReturn(mockContext)
-        Mockito.`when`(qsHost.uiEventLogger).thenReturn(uiEventLogger)
 
         tile =
             FlashlightTile(
                 qsHost,
+                uiEventLogger,
                 testableLooper.looper,
                 Handler(testableLooper.looper),
                 falsingManager,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FontScalingTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FontScalingTileTest.kt
index eeebd4f..1d6f225 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FontScalingTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/FontScalingTileTest.kt
@@ -23,7 +23,6 @@
 import android.view.View
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.UiEventLogger
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.animation.DialogLaunchAnimator
 import com.android.systemui.classifier.FalsingManagerFake
@@ -31,7 +30,8 @@
 import com.android.systemui.flags.Flags
 import com.android.systemui.plugins.ActivityStarter
 import com.android.systemui.plugins.statusbar.StatusBarStateController
-import com.android.systemui.qs.QSTileHost
+import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.util.mockito.any
 import com.android.systemui.util.mockito.eq
@@ -52,13 +52,13 @@
 @TestableLooper.RunWithLooper(setAsMainLooper = true)
 @SmallTest
 class FontScalingTileTest : SysuiTestCase() {
-    @Mock private lateinit var qsHost: QSTileHost
+    @Mock private lateinit var qsHost: QSHost
     @Mock private lateinit var metricsLogger: MetricsLogger
     @Mock private lateinit var statusBarStateController: StatusBarStateController
     @Mock private lateinit var activityStarter: ActivityStarter
     @Mock private lateinit var qsLogger: QSLogger
     @Mock private lateinit var dialogLaunchAnimator: DialogLaunchAnimator
-    @Mock private lateinit var uiEventLogger: UiEventLogger
+    @Mock private lateinit var uiEventLogger: QsEventLogger
 
     private lateinit var testableLooper: TestableLooper
     private lateinit var fontScalingTile: FontScalingTile
@@ -70,11 +70,11 @@
         MockitoAnnotations.initMocks(this)
         testableLooper = TestableLooper.get(this)
         `when`(qsHost.getContext()).thenReturn(mContext)
-        `when`(qsHost.uiEventLogger).thenReturn(uiEventLogger)
 
         fontScalingTile =
             FontScalingTile(
                 qsHost,
+                uiEventLogger,
                 testableLooper.looper,
                 Handler(testableLooper.looper),
                 FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/HotspotTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/HotspotTileTest.java
index 959e750..73f61d06 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/HotspotTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/HotspotTileTest.java
@@ -38,6 +38,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.DataSaverController;
@@ -66,6 +67,8 @@
     private HotspotController mHotspotController;
     @Mock
     private DataSaverController mDataSaverController;
+    @Mock
+    private QsEventLogger mUiEventLogger;
 
     private TestableLooper mTestableLooper;
     private HotspotTile mTile;
@@ -80,6 +83,7 @@
 
         mTile = new HotspotTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java
index adfd7f7..7957c6a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java
@@ -35,6 +35,7 @@
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
@@ -63,6 +64,8 @@
     private AccessPointController mAccessPointController;
     @Mock
     private InternetDialogFactory mInternetDialogFactory;
+    @Mock
+    private QsEventLogger mUiEventLogger;
 
     private TestableLooper mTestableLooper;
     private InternetTile mTile;
@@ -76,6 +79,7 @@
 
         mTile = new InternetTile(
             mHost,
+            mUiEventLogger,
             mTestableLooper.getLooper(),
             new Handler(mTestableLooper.getLooper()),
             new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/LocationTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/LocationTileTest.kt
index 3642e87..0bf0b38 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/LocationTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/LocationTileTest.kt
@@ -22,7 +22,6 @@
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.testing.UiEventLoggerFake
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.classifier.FalsingManagerFake
@@ -30,6 +29,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor
 import com.android.systemui.qs.tileimpl.QSTileImpl
@@ -43,8 +43,8 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
 
 @RunWith(AndroidTestingRunner::class)
@@ -71,8 +71,9 @@
     private lateinit var keyguardStateController: KeyguardStateController
     @Mock
     private lateinit var panelInteractor: PanelInteractor
+    @Mock
+    private lateinit var uiEventLogger: QsEventLogger
 
-    private val uiEventLogger = UiEventLoggerFake()
     private lateinit var testableLooper: TestableLooper
     private lateinit var tile: LocationTile
 
@@ -80,10 +81,11 @@
     fun setUp() {
         MockitoAnnotations.initMocks(this)
         testableLooper = TestableLooper.get(this)
-        `when`(qsHost.uiEventLogger).thenReturn(uiEventLogger)
         `when`(qsHost.context).thenReturn(mockContext)
 
-        tile = LocationTile(qsHost,
+        tile = LocationTile(
+            qsHost,
+            uiEventLogger,
             testableLooper.looper,
             Handler(testableLooper.looper),
             falsingManager,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt
index e2f64b2..ceff546 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt
@@ -21,8 +21,6 @@
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.UiEventLogger
-import com.android.internal.logging.testing.UiEventLoggerFake
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.classifier.FalsingManagerFake
@@ -30,6 +28,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController
@@ -67,19 +66,22 @@
     private lateinit var privacyController: IndividualSensorPrivacyController
     @Mock
     private lateinit var keyguardStateController: KeyguardStateController
+    @Mock
+    private lateinit var uiEventLogger: QsEventLogger
 
     private lateinit var testableLooper: TestableLooper
     private lateinit var tile: MicrophoneToggleTile
-    private val uiEventLogger: UiEventLogger = UiEventLoggerFake()
+
 
     @Before
     fun setUp() {
         MockitoAnnotations.initMocks(this)
         testableLooper = TestableLooper.get(this)
         whenever(host.context).thenReturn(mContext)
-        whenever(host.uiEventLogger).thenReturn(uiEventLogger)
 
-        tile = MicrophoneToggleTile(host,
+        tile = MicrophoneToggleTile(
+                host,
+                uiEventLogger,
                 testableLooper.looper,
                 Handler(testableLooper.looper),
                 metricsLogger,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NfcTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NfcTileTest.java
index c7dae83..763a7e5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NfcTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NfcTileTest.java
@@ -37,6 +37,7 @@
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 
 import org.junit.After;
@@ -70,6 +71,8 @@
     private QSLogger mQSLogger;
     @Mock
     private BroadcastDispatcher mBroadcastDispatcher;
+    @Mock
+    private QsEventLogger mUiEventLogger;
 
     private TestableLooper mTestableLooper;
     private NfcTile mNfcTile;
@@ -84,6 +87,7 @@
 
         mNfcTile = new NfcTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NightDisplayTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NightDisplayTileTest.kt
index 04af69c..6c8f76b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NightDisplayTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/NightDisplayTileTest.kt
@@ -23,8 +23,6 @@
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.UiEventLogger
-import com.android.internal.logging.testing.UiEventLoggerFake
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.classifier.FalsingManagerFake
@@ -33,6 +31,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.LocationController
@@ -43,8 +42,8 @@
 import org.junit.runner.RunWith
 import org.mockito.Mock
 import org.mockito.Mockito.anyInt
-import org.mockito.Mockito.`when` as whenever
 import org.mockito.MockitoAnnotations
+import org.mockito.Mockito.`when` as whenever
 
 @RunWith(AndroidTestingRunner::class)
 @TestableLooper.RunWithLooper(setAsMainLooper = true)
@@ -68,17 +67,18 @@
 
     @Mock private lateinit var mNightDisplayListener: NightDisplayListener
 
+    @Mock private lateinit var mUiEventLogger: QsEventLogger
+
     private lateinit var mTestableLooper: TestableLooper
     private lateinit var mTile: NightDisplayTile
 
-    private val mUiEventLogger: UiEventLogger = UiEventLoggerFake()
+
 
     @Before
     fun setUp() {
         MockitoAnnotations.initMocks(this)
         mTestableLooper = TestableLooper.get(this)
         whenever(mHost.context).thenReturn(mContext)
-        whenever(mHost.uiEventLogger).thenReturn(mUiEventLogger)
         whenever(mHost.userContext).thenReturn(mContext)
         whenever(mNightDisplayListenerBuilder.setUser(anyInt()))
             .thenReturn(mNightDisplayListenerBuilder)
@@ -87,6 +87,7 @@
         mTile =
             NightDisplayTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.looper,
                 Handler(mTestableLooper.looper),
                 FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/OneHandedModeTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/OneHandedModeTileTest.java
index 652c138..c391153 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/OneHandedModeTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/OneHandedModeTileTest.java
@@ -33,6 +33,7 @@
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.settings.UserTracker;
 import com.android.systemui.util.settings.SecureSettings;
@@ -65,6 +66,8 @@
     private UserTracker mUserTracker;
     @Mock
     private SecureSettings mSecureSettings;
+    @Mock
+    private QsEventLogger mUiEventLogger;
 
     private TestableLooper mTestableLooper;
     private OneHandedModeTile mTile;
@@ -78,6 +81,7 @@
 
         mTile = spy(new OneHandedModeTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QRCodeScannerTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QRCodeScannerTileTest.java
index 3125d45..6f2d904 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QRCodeScannerTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QRCodeScannerTileTest.java
@@ -30,8 +30,6 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.UiEventLogger;
-import com.android.internal.logging.testing.UiEventLoggerFake;
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.classifier.FalsingManagerFake;
@@ -40,6 +38,7 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qrcodescanner.controller.QRCodeScannerController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 
@@ -64,7 +63,8 @@
     private ActivityStarter mActivityStarter;
     @Mock
     private QSLogger mQSLogger;
-    private UiEventLogger mUiEventLogger = new UiEventLoggerFake();
+    @Mock
+    private QsEventLogger mUiEventLogger;
     @Mock
     private QRCodeScannerController mController;
 
@@ -79,6 +79,7 @@
 
         mTile = new QRCodeScannerTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
index 596df78..b089e38 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java
@@ -58,8 +58,6 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.UiEventLogger;
-import com.android.internal.logging.testing.UiEventLoggerFake;
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.classifier.FalsingManagerFake;
@@ -67,6 +65,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -109,7 +108,8 @@
     private ActivityStarter mActivityStarter;
     @Mock
     private QSLogger mQSLogger;
-    private UiEventLogger mUiEventLogger = new UiEventLoggerFake();
+    @Mock
+    private QsEventLogger mUiEventLogger;
     @Mock
     private QuickAccessWalletClient mQuickAccessWalletClient;
     @Mock
@@ -136,7 +136,6 @@
 
         doNothing().when(mSpiedContext).startActivity(any(Intent.class));
         when(mHost.getContext()).thenReturn(mSpiedContext);
-        when(mHost.getUiEventLogger()).thenReturn(mUiEventLogger);
         when(mQuickAccessWalletClient.getServiceLabel()).thenReturn(LABEL);
         when(mQuickAccessWalletClient.getTileIcon()).thenReturn(mTileIcon);
         when(mQuickAccessWalletClient.isWalletFeatureAvailable()).thenReturn(true);
@@ -146,6 +145,7 @@
 
         mTile = new QuickAccessWalletTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java
index 7913628..d244594 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ReduceBrightColorsTileTest.java
@@ -39,6 +39,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.ReduceBrightColorsController;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -69,6 +70,8 @@
     private UserTracker mUserTracker;
     @Mock
     private ReduceBrightColorsController mReduceBrightColorsController;
+    @Mock
+    private QsEventLogger mUiEventLogger;
 
     private TestableLooper mTestableLooper;
     private ReduceBrightColorsTile mTile;
@@ -85,6 +88,7 @@
                 true,
                 mReduceBrightColorsController,
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java
index 5b94cfe..e106741 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java
@@ -39,6 +39,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.BatteryController;
@@ -87,6 +88,8 @@
     DeviceStateRotationLockSettingController mDeviceStateRotationLockSettingController;
     @Mock
     RotationPolicyWrapper mRotationPolicyWrapper;
+    @Mock
+    QsEventLogger mUiEventLogger;
 
     private RotationLockController mController;
     private TestableLooper mTestableLooper;
@@ -105,6 +108,7 @@
 
         mLockTile = new RotationLockTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
index d9ed1a2..fff2b8f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
@@ -44,6 +44,7 @@
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.QsEventLogger;
 import com.android.systemui.qs.logging.QSLogger;
 import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
 import com.android.systemui.qs.tileimpl.QSTileImpl;
@@ -86,6 +87,8 @@
     private DialogLaunchAnimator mDialogLaunchAnimator;
     @Mock
     private PanelInteractor mPanelInteractor;
+    @Mock
+    private QsEventLogger mUiEventLogger;
 
     private TestableLooper mTestableLooper;
     private ScreenRecordTile mTile;
@@ -100,6 +103,7 @@
 
         mTile = new ScreenRecordTile(
                 mHost,
+                mUiEventLogger,
                 mTestableLooper.getLooper(),
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UiModeNightTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UiModeNightTileTest.kt
index b556571..79147e7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UiModeNightTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/UiModeNightTileTest.kt
@@ -25,7 +25,6 @@
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
-import com.android.internal.logging.testing.UiEventLoggerFake
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.classifier.FalsingManagerFake
@@ -33,6 +32,7 @@
 import com.android.systemui.plugins.qs.QSTile
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSHost
+import com.android.systemui.qs.QsEventLogger
 import com.android.systemui.qs.logging.QSLogger
 import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.BatteryController
@@ -63,8 +63,8 @@
     @Mock private lateinit var configurationController: ConfigurationController
     @Mock private lateinit var batteryController: BatteryController
     @Mock private lateinit var locationController: LocationController
+    @Mock private lateinit var uiEventLogger: QsEventLogger
 
-    private val uiEventLogger = UiEventLoggerFake()
     private val falsingManager = FalsingManagerFake()
     private lateinit var testableLooper: TestableLooper
     private lateinit var tile: UiModeNightTile
@@ -81,11 +81,11 @@
         `when`(qsHost.userContext).thenReturn(mContext)
         `when`(mockContext.resources).thenReturn(resources)
         `when`(resources.configuration).thenReturn(configuration)
-        `when`(qsHost.uiEventLogger).thenReturn(uiEventLogger)
 
         tile =
             UiModeNightTile(
                 qsHost,
+                uiEventLogger,
                 testableLooper.looper,
                 Handler(testableLooper.looper),
                 falsingManager,
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/NotificationPanelUnfoldAnimationControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationControllerTest.kt
index db6fc13..38a666e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationControllerTest.kt
@@ -37,6 +37,7 @@
 import org.mockito.ArgumentCaptor
 import org.mockito.Captor
 import org.mockito.Mock
+import org.mockito.Mockito.atLeastOnce
 import org.mockito.Mockito.verify
 import org.mockito.MockitoAnnotations
 
@@ -54,10 +55,12 @@
 
     @Mock private lateinit var parent: ViewGroup
 
+    @Mock private lateinit var splitShadeStatusBar: ViewGroup
+
     @Mock private lateinit var statusBarStateController: StatusBarStateController
 
     private lateinit var underTest: NotificationPanelUnfoldAnimationController
-    private lateinit var progressListener: TransitionProgressListener
+    private lateinit var progressListeners: List<TransitionProgressListener>
     private var xTranslationMax = 0f
 
     @Before
@@ -73,10 +76,13 @@
                 statusBarStateController,
                 progressProvider
             )
+        whenever(parent.findViewById<ViewGroup>(R.id.split_shade_status_bar)).thenReturn(
+            splitShadeStatusBar
+        )
         underTest.setup(parent)
 
-        verify(progressProvider).addCallback(capture(progressListenerCaptor))
-        progressListener = progressListenerCaptor.value
+        verify(progressProvider, atLeastOnce()).addCallback(capture(progressListenerCaptor))
+        progressListeners = progressListenerCaptor.allValues
     }
 
     @Test
@@ -86,16 +92,16 @@
         val view = View(context)
         whenever(parent.findViewById<View>(R.id.quick_settings_panel)).thenReturn(view)
 
-        progressListener.onTransitionStarted()
+        onTransitionStarted()
         assertThat(view.translationX).isZero()
 
-        progressListener.onTransitionProgress(0f)
+        onTransitionProgress(0f)
         assertThat(view.translationX).isZero()
 
-        progressListener.onTransitionProgress(0.5f)
+        onTransitionProgress(0.5f)
         assertThat(view.translationX).isZero()
 
-        progressListener.onTransitionFinished()
+        onTransitionFinished()
         assertThat(view.translationX).isZero()
     }
 
@@ -106,16 +112,16 @@
         val view = View(context)
         whenever(parent.findViewById<View>(R.id.quick_settings_panel)).thenReturn(view)
 
-        progressListener.onTransitionStarted()
+        onTransitionStarted()
         assertThat(view.translationX).isZero()
 
-        progressListener.onTransitionProgress(0f)
+        onTransitionProgress(0f)
         assertThat(view.translationX).isEqualTo(xTranslationMax)
 
-        progressListener.onTransitionProgress(0.5f)
+        onTransitionProgress(0.5f)
         assertThat(view.translationX).isEqualTo(0.5f * xTranslationMax)
 
-        progressListener.onTransitionFinished()
+        onTransitionFinished()
         assertThat(view.translationX).isZero()
     }
 
@@ -126,16 +132,88 @@
         val view = View(context)
         whenever(parent.findViewById<View>(R.id.quick_settings_panel)).thenReturn(view)
 
-        progressListener.onTransitionStarted()
+        onTransitionStarted()
         assertThat(view.translationX).isZero()
 
-        progressListener.onTransitionProgress(0f)
+        onTransitionProgress(0f)
         assertThat(view.translationX).isEqualTo(xTranslationMax)
 
-        progressListener.onTransitionProgress(0.5f)
+        onTransitionProgress(0.5f)
         assertThat(view.translationX).isEqualTo(0.5f * xTranslationMax)
 
-        progressListener.onTransitionFinished()
+        onTransitionFinished()
         assertThat(view.translationX).isZero()
     }
+
+    @Test
+    fun whenInKeyguardState_statusBarViewDoesNotMove() {
+        whenever(statusBarStateController.getState()).thenReturn(KEYGUARD)
+
+        val view = View(context)
+        whenever(splitShadeStatusBar.findViewById<View>(R.id.date)).thenReturn(view)
+
+        onTransitionStarted()
+        assertThat(view.translationX).isZero()
+
+        onTransitionProgress(0f)
+        assertThat(view.translationX).isZero()
+
+        onTransitionProgress(0.5f)
+        assertThat(view.translationX).isZero()
+
+        onTransitionFinished()
+        assertThat(view.translationX).isZero()
+    }
+
+    @Test
+    fun whenInShadeState_statusBarViewDoesMove() {
+        whenever(statusBarStateController.getState()).thenReturn(SHADE)
+
+        val view = View(context)
+        whenever(splitShadeStatusBar.findViewById<View>(R.id.date)).thenReturn(view)
+
+        onTransitionStarted()
+        assertThat(view.translationX).isZero()
+
+        onTransitionProgress(0f)
+        assertThat(view.translationX).isEqualTo(xTranslationMax)
+
+        onTransitionProgress(0.5f)
+        assertThat(view.translationX).isEqualTo(0.5f * xTranslationMax)
+
+        onTransitionFinished()
+        assertThat(view.translationX).isZero()
+    }
+
+    @Test
+    fun whenInShadeLockedState_statusBarViewDoesMove() {
+        whenever(statusBarStateController.getState()).thenReturn(SHADE_LOCKED)
+
+        val view = View(context)
+        whenever(splitShadeStatusBar.findViewById<View>(R.id.date)).thenReturn(view)
+        onTransitionStarted()
+        assertThat(view.translationX).isZero()
+
+        onTransitionProgress(0f)
+        assertThat(view.translationX).isEqualTo(xTranslationMax)
+
+        onTransitionProgress(0.5f)
+        assertThat(view.translationX).isEqualTo(0.5f * xTranslationMax)
+
+        onTransitionFinished()
+        assertThat(view.translationX).isZero()
+    }
+
+    private fun onTransitionStarted() {
+        progressListeners.forEach { it.onTransitionStarted() }
+    }
+
+    private fun onTransitionProgress(progress: Float) {
+        progressListeners.forEach { it.onTransitionProgress(progress) }
+    }
+
+    private fun onTransitionFinished() {
+        progressListeners.forEach { it.onTransitionFinished() }
+    }
+
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
index 5ca3771..068d933 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
@@ -93,6 +93,7 @@
 import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository;
 import com.android.systemui.keyguard.domain.interactor.AlternateBouncerInteractor;
 import com.android.systemui.keyguard.domain.interactor.KeyguardBottomAreaInteractor;
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
 import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
 import com.android.systemui.keyguard.ui.viewmodel.DreamingToLockscreenTransitionViewModel;
@@ -302,6 +303,7 @@
     protected ArgumentCaptor<NotificationStackScrollLayout.OnEmptySpaceClickListener>
             mEmptySpaceClickListenerCaptor;
     @Mock protected ActivityStarter mActivityStarter;
+    @Mock protected KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor;
 
     protected KeyguardBottomAreaInteractor mKeyguardBottomAreaInteractor;
     protected KeyguardInteractor mKeyguardInteractor;
@@ -599,7 +601,8 @@
                 mDumpManager,
                 mKeyuardLongPressViewModel,
                 mKeyguardInteractor,
-                mActivityStarter);
+                mActivityStarter,
+                mKeyguardFaceAuthInteractor);
         mNotificationPanelViewController.initDependencies(
                 mCentralSurfaces,
                 null,
@@ -665,7 +668,8 @@
                 mMetricsLogger,
                 mFeatureFlags,
                 mInteractionJankMonitor,
-                mShadeLog
+                mShadeLog,
+                mKeyguardFaceAuthInteractor
         );
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
index 2db9c97..600fb5c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
@@ -930,6 +930,7 @@
         mTouchHandler.onTouch(mock(View.class), mDownMotionEvent);
         mEmptySpaceClickListenerCaptor.getValue().onEmptySpaceClicked(0, 0);
 
+        verify(mKeyguardFaceAuthInteractor).onNotificationPanelClicked();
         verify(mUpdateMonitor).requestFaceAuth(
                 FaceAuthApiRequestReason.NOTIFICATION_PANEL_CLICKED);
     }
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/QuickSettingsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java
index d8ffe39..908f7cb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java
@@ -62,6 +62,7 @@
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.fragments.FragmentHostManager;
+import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
 import com.android.systemui.media.controls.pipeline.MediaDataManager;
 import com.android.systemui.media.controls.ui.MediaHierarchyManager;
 import com.android.systemui.plugins.FalsingManager;
@@ -239,7 +240,8 @@
                 mMetricsLogger,
                 mFeatureFlags,
                 mInteractionJankMonitor,
-                mShadeLogger
+                mShadeLogger,
+                mock(KeyguardFaceAuthInteractor.class)
         );
 
         mFragmentListener = mQsController.getQsFragmentListener();
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 b043e97..9fe75ab 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt
@@ -16,6 +16,8 @@
 package com.android.systemui.shade
 
 import android.animation.Animator
+import android.app.AlarmManager
+import android.app.PendingIntent
 import android.app.StatusBarManager
 import android.content.Context
 import android.content.res.Resources
@@ -40,8 +42,10 @@
 import com.android.systemui.demomode.DemoMode
 import com.android.systemui.demomode.DemoModeController
 import com.android.systemui.dump.DumpManager
+import com.android.systemui.plugins.ActivityStarter
 import com.android.systemui.qs.ChipVisibilityListener
 import com.android.systemui.qs.HeaderPrivacyIconsController
+import com.android.systemui.shade.ShadeHeaderController.Companion.DEFAULT_CLOCK_INTENT
 import com.android.systemui.shade.ShadeHeaderController.Companion.LARGE_SCREEN_HEADER_CONSTRAINT
 import com.android.systemui.shade.ShadeHeaderController.Companion.QQS_HEADER_CONSTRAINT
 import com.android.systemui.shade.ShadeHeaderController.Companion.QS_HEADER_CONSTRAINT
@@ -52,6 +56,7 @@
 import com.android.systemui.statusbar.phone.StatusIconContainer
 import com.android.systemui.statusbar.policy.Clock
 import com.android.systemui.statusbar.policy.FakeConfigurationController
+import com.android.systemui.statusbar.policy.NextAlarmController
 import com.android.systemui.statusbar.policy.VariableDateView
 import com.android.systemui.statusbar.policy.VariableDateViewController
 import com.android.systemui.util.mockito.any
@@ -114,6 +119,8 @@
 
     @Mock private lateinit var demoModeController: DemoModeController
     @Mock private lateinit var qsBatteryModeController: QsBatteryModeController
+    @Mock private lateinit var nextAlarmController: NextAlarmController
+    @Mock private lateinit var activityStarter: ActivityStarter
 
     @JvmField @Rule val mockitoRule = MockitoJUnit.rule()
     var viewVisibility = View.GONE
@@ -181,6 +188,8 @@
                 combinedShadeHeadersConstraintManager,
                 demoModeController,
                 qsBatteryModeController,
+                nextAlarmController,
+                activityStarter,
             )
         whenever(view.isAttachedToWindow).thenReturn(true)
         shadeHeaderController.init()
@@ -357,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)))
@@ -816,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
@@ -828,6 +837,28 @@
         verify(carrierGroup).setPaddingRelative(514, 0, 0, 0)
     }
 
+    @Test
+    fun launchClock_launchesDefaultIntentWhenNoAlarmSet() {
+        shadeHeaderController.launchClockActivity()
+
+        verify(activityStarter).postStartActivityDismissingKeyguard(DEFAULT_CLOCK_INTENT, 0)
+    }
+
+    @Test
+    fun launchClock_launchesNextAlarmWhenExists() {
+        val pendingIntent = mock<PendingIntent>()
+        val aci = AlarmManager.AlarmClockInfo(12345, pendingIntent)
+        val captor =
+            ArgumentCaptor.forClass(NextAlarmController.NextAlarmChangeCallback::class.java)
+
+        verify(nextAlarmController).addCallback(capture(captor))
+        captor.value.onNextAlarmChanged(aci)
+
+        shadeHeaderController.launchClockActivity()
+
+        verify(activityStarter).postStartActivityDismissingKeyguard(pendingIntent)
+    }
+
     private fun View.executeLayoutChange(
         left: Int,
         top: Int,
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..283efe2 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
@@ -39,8 +38,10 @@
 import com.android.systemui.statusbar.notification.collection.provider.LaunchFullScreenIntentProvider
 import com.android.systemui.statusbar.notification.collection.render.NodeController
 import com.android.systemui.statusbar.notification.interruption.HeadsUpViewBinder
-import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider
 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider.FullScreenIntentDecision
+import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderWrapper.DecisionImpl
+import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderWrapper.FullScreenIntentDecisionImpl
+import com.android.systemui.statusbar.notification.interruption.VisualInterruptionDecisionProvider
 import com.android.systemui.statusbar.notification.row.NotifBindPipeline.BindCallback
 import com.android.systemui.statusbar.phone.NotificationGroupTestHelper
 import com.android.systemui.statusbar.policy.HeadsUpManager
@@ -53,6 +54,7 @@
 import com.android.systemui.util.time.FakeSystemClock
 import java.util.ArrayList
 import java.util.function.Consumer
+import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
 import org.junit.Before
@@ -87,7 +89,7 @@
     private val logger = HeadsUpCoordinatorLogger(logcatLogBuffer(), verbose = true)
     private val headsUpManager: HeadsUpManager = mock()
     private val headsUpViewBinder: HeadsUpViewBinder = mock()
-    private val notificationInterruptStateProvider: NotificationInterruptStateProvider = mock()
+    private val visualInterruptionDecisionProvider: VisualInterruptionDecisionProvider = mock()
     private val remoteInputManager: NotificationRemoteInputManager = mock()
     private val endLifetimeExtension: OnEndLifetimeExtensionCallback = mock()
     private val headerController: NodeController = mock()
@@ -115,7 +117,7 @@
             systemClock,
             headsUpManager,
             headsUpViewBinder,
-            notificationInterruptStateProvider,
+            visualInterruptionDecisionProvider,
             remoteInputManager,
             launchFullScreenIntentProvider,
             flags,
@@ -169,11 +171,11 @@
         groupChild2 = helper.createChildNotification(GROUP_ALERT_ALL, 2, "child", 250)
         groupChild3 = helper.createChildNotification(GROUP_ALERT_ALL, 3, "child", 150)
 
-        // Set the default FSI decision
-        setShouldFullScreen(any(), FullScreenIntentDecision.NO_FULL_SCREEN_INTENT)
+        // Set the default HUN decision
+        setDefaultShouldHeadsUp(false)
 
-        // Run tests with default feature flag state
-        whenever(flags.fsiOnDNDUpdate()).thenReturn(Flags.FSI_ON_DND_UPDATE.default)
+        // Set the default FSI decision
+        setDefaultShouldFullScreen(FullScreenIntentDecision.NO_FULL_SCREEN_INTENT)
     }
 
     @Test
@@ -258,7 +260,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 +856,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 +900,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 +948,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 +983,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 +997,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,38 +1005,66 @@
         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
         verify(launchFullScreenIntentProvider, never()).launchFullScreenIntent(entry)
     }
 
-    private fun setShouldHeadsUp(entry: NotificationEntry, should: Boolean = true) {
-        whenever(notificationInterruptStateProvider.shouldHeadsUp(entry)).thenReturn(should)
-        whenever(notificationInterruptStateProvider.checkHeadsUp(eq(entry), any()))
-                .thenReturn(should)
+    private fun setDefaultShouldHeadsUp(should: Boolean) {
+        whenever(visualInterruptionDecisionProvider.makeAndLogHeadsUpDecision(any()))
+            .thenReturn(DecisionImpl.of(should))
+        whenever(visualInterruptionDecisionProvider.makeUnloggedHeadsUpDecision(any()))
+            .thenReturn(DecisionImpl.of(should))
     }
 
-    private fun setShouldFullScreen(entry: NotificationEntry, decision: FullScreenIntentDecision) {
-        whenever(notificationInterruptStateProvider.getFullScreenIntentDecision(entry))
-            .thenReturn(decision)
+    private fun setShouldHeadsUp(entry: NotificationEntry, should: Boolean = true) {
+        whenever(visualInterruptionDecisionProvider.makeAndLogHeadsUpDecision(entry))
+            .thenReturn(DecisionImpl.of(should))
+        whenever(visualInterruptionDecisionProvider.makeUnloggedHeadsUpDecision(entry))
+            .thenReturn(DecisionImpl.of(should))
+    }
+
+    private fun setDefaultShouldFullScreen(
+        originalDecision: FullScreenIntentDecision
+    ) {
+        val provider = visualInterruptionDecisionProvider
+        whenever(provider.makeUnloggedFullScreenIntentDecision(any())).thenAnswer {
+            val entry: NotificationEntry = it.getArgument(0)
+            FullScreenIntentDecisionImpl(entry, originalDecision)
+        }
+    }
+
+    private fun setShouldFullScreen(
+        entry: NotificationEntry,
+        originalDecision: FullScreenIntentDecision
+    ) {
+        whenever(
+            visualInterruptionDecisionProvider.makeUnloggedFullScreenIntentDecision(entry)
+        ).thenAnswer {
+            FullScreenIntentDecisionImpl(entry, originalDecision)
+        }
     }
 
     private fun verifyLoggedFullScreenIntentDecision(
         entry: NotificationEntry,
-        decision: FullScreenIntentDecision
+        originalDecision: FullScreenIntentDecision
     ) {
-        verify(notificationInterruptStateProvider).logFullScreenIntentDecision(entry, decision)
+        val decision = withArgCaptor {
+            verify(visualInterruptionDecisionProvider).logFullScreenIntentDecision(capture())
+        }
+        check(decision is FullScreenIntentDecisionImpl)
+        assertEquals(entry, decision.originalEntry)
+        assertEquals(originalDecision, decision.originalDecision)
     }
 
     private fun verifyNoFullScreenIntentDecisionLogged() {
-        verify(notificationInterruptStateProvider, never())
-            .logFullScreenIntentDecision(any(), any())
+        verify(visualInterruptionDecisionProvider, never()).logFullScreenIntentDecision(any())
     }
 
     private fun clearInterruptionProviderInvocations() {
-        clearInvocations(notificationInterruptStateProvider)
+        clearInvocations(visualInterruptionDecisionProvider)
     }
 
     private fun finishBind(entry: NotificationEntry) {
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 8109e24..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,7 +24,12 @@
 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
+import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.keyguard.shared.model.TransitionStep
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.statusbar.StatusBarState
 import com.android.systemui.statusbar.notification.NotifPipelineFlags
@@ -69,6 +74,7 @@
     private val headsUpManager: HeadsUpManager = mock()
     private val keyguardNotifVisibilityProvider: KeyguardNotificationVisibilityProvider = mock()
     private val keyguardRepository = FakeKeyguardRepository()
+    private val keyguardTransitionRepository = FakeKeyguardTransitionRepository()
     private val notifPipelineFlags: NotifPipelineFlags = mock()
     private val notifPipeline: NotifPipeline = mock()
     private val sectionHeaderVisibilityProvider: SectionHeaderVisibilityProvider = mock()
@@ -92,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)
@@ -118,9 +122,32 @@
     }
 
     @Test
-    fun unseenFilter_headsUpMarkedAsSeen() {
-        whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
+    fun unseenFilterStopsMarkingSeenNotifWhenTransitionToAod() {
+        // GIVEN: Keyguard is not showing, shade is not expanded, and a notification is present
+        keyguardRepository.setKeyguardShowing(false)
+        whenever(statusBarStateController.isExpanded).thenReturn(false)
+        runKeyguardCoordinatorTest {
+            val fakeEntry = NotificationEntryBuilder().build()
+            collectionListener.onEntryAdded(fakeEntry)
 
+            // WHEN: The device transitions to AOD
+            keyguardTransitionRepository.sendTransitionStep(
+                TransitionStep(to = KeyguardState.AOD, transitionState = TransitionState.STARTED),
+            )
+            testScheduler.runCurrent()
+
+            // WHEN: The shade is expanded
+            whenever(statusBarStateController.isExpanded).thenReturn(true)
+            statusBarStateListener.onExpandedChanged(true)
+            testScheduler.runCurrent()
+
+            // THEN: The notification is still treated as "unseen" and is not filtered out.
+            assertThat(unseenFilter.shouldFilterOut(fakeEntry, 0L)).isFalse()
+        }
+    }
+
+    @Test
+    fun unseenFilter_headsUpMarkedAsSeen() {
         // GIVEN: Keyguard is not showing, shade is not expanded
         keyguardRepository.setKeyguardShowing(false)
         whenever(statusBarStateController.isExpanded).thenReturn(false)
@@ -151,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)
 
@@ -173,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)
@@ -197,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)
@@ -223,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)
@@ -260,8 +279,6 @@
 
     @Test
     fun unseenFilterAllowsNewNotif() {
-        whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
         // GIVEN: Keyguard is showing, no notifications present
         keyguardRepository.setKeyguardShowing(true)
         runKeyguardCoordinatorTest {
@@ -276,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)
@@ -310,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)
@@ -338,8 +351,6 @@
 
     @Test
     fun unseenNotificationIsNotMarkedAsSeenIfShadeNotExpanded() {
-        whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
         // GIVEN: Keyguard is showing, unseen notification is present
         keyguardRepository.setKeyguardShowing(true)
         runKeyguardCoordinatorTest {
@@ -370,9 +381,12 @@
         val keyguardCoordinator =
             KeyguardCoordinator(
                 testDispatcher,
+                mock<DumpManager>(),
                 headsUpManager,
                 keyguardNotifVisibilityProvider,
                 keyguardRepository,
+                keyguardTransitionRepository,
+                mock<KeyguardCoordinatorLogger>(),
                 notifPipelineFlags,
                 testScope.backgroundScope,
                 sectionHeaderVisibilityProvider,
@@ -408,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/ExpandableNotificationRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
index 7d02219..9186c35 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
@@ -100,7 +100,6 @@
         mNotificationTestHelper.setDefaultInflationFlags(FLAG_CONTENT_VIEW_ALL);
 
         FakeFeatureFlags fakeFeatureFlags = new FakeFeatureFlags();
-        fakeFeatureFlags.set(Flags.NOTIFICATION_ANIMATE_BIG_PICTURE, true);
         fakeFeatureFlags.set(Flags.SENSITIVE_REVEAL_ANIM, false);
         mNotificationTestHelper.setFeatureFlags(fakeFeatureFlags);
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java
index 819a75b..90cb734 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java
@@ -24,12 +24,12 @@
 
 import static org.mockito.Mockito.mock;
 
+import android.testing.AndroidTestingRunner;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.TextView;
 
 import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
 
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
@@ -39,7 +39,7 @@
 import org.junit.runner.RunWith;
 
 @SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(AndroidTestingRunner.class)
 public class FooterViewTest extends SysuiTestCase {
 
     FooterView mView;
@@ -102,14 +102,21 @@
     }
 
     @Test
-    public void testSetFooterLabelTextAndIcon() {
-        mView.setFooterLabelTextAndIcon(
-                R.string.unlock_to_see_notif_text,
-                R.drawable.ic_friction_lock_closed);
+    public void testSetFooterLabelVisible() {
+        mView.setFooterLabelVisible(true);
         assertThat(mView.findViewById(R.id.manage_text).getVisibility()).isEqualTo(View.GONE);
         assertThat(mView.findSecondaryView().getVisibility()).isEqualTo(View.GONE);
         assertThat(mView.findViewById(R.id.unlock_prompt_footer).getVisibility())
                 .isEqualTo(View.VISIBLE);
     }
+
+    @Test
+    public void testSetFooterLabelInvisible() {
+        mView.setFooterLabelVisible(false);
+        assertThat(mView.findViewById(R.id.manage_text).getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(mView.findSecondaryView().getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(mView.findViewById(R.id.unlock_prompt_footer).getVisibility())
+                .isEqualTo(View.GONE);
+    }
 }
 
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 14e5f9e..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,18 +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.notification.shelf.domain.interactor.NotificationShelfInteractor
+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
@@ -37,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 {
@@ -68,4 +86,37 @@
 
         assertThat(shelfStatic).isTrue()
     }
+
+    @Test
+    fun shelfOnKeyguard_whenKeyguardShowing() = runTest {
+        val onKeyguard by collectLastValue(underTest.isShowingOnKeyguard)
+
+        keyguardRepository.setKeyguardShowing(true)
+
+        assertThat(onKeyguard).isTrue()
+    }
+
+    @Test
+    fun shelfNotOnKeyguard_whenKeyguardNotShowing() = runTest {
+        val onKeyguard by collectLastValue(underTest.isShowingOnKeyguard)
+
+        keyguardRepository.setKeyguardShowing(false)
+
+        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 6c5fb8b..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 {
@@ -69,4 +105,31 @@
 
         assertThat(canModifyNotifColor).isFalse()
     }
+
+    @Test
+    fun isClickable_whenKeyguardShowing() = runTest {
+        val isClickable by collectLastValue(underTest.isClickable)
+
+        keyguardRepository.setKeyguardShowing(true)
+
+        assertThat(isClickable).isTrue()
+    }
+
+    @Test
+    fun isNotClickable_whenKeyguardNotShowing() = runTest {
+        val isClickable by collectLastValue(underTest.isClickable)
+
+        keyguardRepository.setKeyguardShowing(false)
+
+        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..420c7ae 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 =
@@ -297,13 +255,41 @@
     }
 
     @Test
+    public void testUpdateEmptyShadeView_bouncerShowing_hideEmptyView() {
+        when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(false);
+        initController(/* viewIsAttached= */ true);
+
+        when(mCentralSurfaces.isBouncerShowing()).thenReturn(true);
+        setupShowEmptyShadeViewState(true);
+        reset(mNotificationStackScrollLayout);
+        mController.updateShowEmptyShadeView();
+        verify(mNotificationStackScrollLayout).updateEmptyShadeView(
+                /* visible= */ false,
+                /* areNotificationsHiddenInShade= */ false);
+    }
+
+    @Test
+    public void testUpdateEmptyShadeView_bouncerNotShowing_showEmptyView() {
+        when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(false);
+        initController(/* viewIsAttached= */ true);
+
+        when(mCentralSurfaces.isBouncerShowing()).thenReturn(false);
+        setupShowEmptyShadeViewState(true);
+        reset(mNotificationStackScrollLayout);
+        mController.updateShowEmptyShadeView();
+        verify(mNotificationStackScrollLayout).updateEmptyShadeView(
+                /* visible= */ true,
+                /* areNotificationsHiddenInShade= */ false);
+    }
+
+    @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 +303,7 @@
     public void testOnStatePostChange_verifyIfProfileIsPublic() {
         when(mNotificationLockscreenUserManager.isAnyProfilePublicMode()).thenReturn(true);
 
-        mController.attach(mNotificationStackScrollLayout);
+        initController(/* viewIsAttached= */ true);
         verify(mSysuiStatusBarStateController).addCallback(
                 mStateListenerArgumentCaptor.capture(), anyInt());
 
@@ -337,7 +323,7 @@
         ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor =
                 ArgumentCaptor.forClass(OnMenuEventListener.class);
 
-        mController.attach(mNotificationStackScrollLayout);
+        initController(/* viewIsAttached= */ true);
         verify(mNotificationSwipeHelperBuilder).setOnMenuEventListener(
                 onMenuEventListenerArgumentCaptor.capture());
 
@@ -358,7 +344,7 @@
         ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor =
                 ArgumentCaptor.forClass(OnMenuEventListener.class);
 
-        mController.attach(mNotificationStackScrollLayout);
+        initController(/* viewIsAttached= */ true);
         verify(mNotificationSwipeHelperBuilder).setOnMenuEventListener(
                 onMenuEventListenerArgumentCaptor.capture());
 
@@ -377,7 +363,7 @@
                 dismissListenerArgumentCaptor = ArgumentCaptor.forClass(
                 NotificationStackScrollLayout.ClearAllListener.class);
 
-        mController.attach(mNotificationStackScrollLayout);
+        initController(/* viewIsAttached= */ true);
 
         verify(mNotificationStackScrollLayout).setClearAllListener(
                 dismissListenerArgumentCaptor.capture());
@@ -394,7 +380,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 +389,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 +400,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 +444,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/notification/stack/NotificationStackSizeCalculatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt
index e6f10cd..5279740 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackSizeCalculatorTest.kt
@@ -23,6 +23,7 @@
 import androidx.test.filters.SmallTest
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.media.controls.pipeline.MediaDataManager
 import com.android.systemui.statusbar.LockscreenShadeTransitionController
 import com.android.systemui.statusbar.StatusBarState
 import com.android.systemui.statusbar.SysuiStatusBarStateController
@@ -48,6 +49,7 @@
     @Mock private lateinit var sysuiStatusBarStateController: SysuiStatusBarStateController
     @Mock
     private lateinit var lockscreenShadeTransitionController: LockscreenShadeTransitionController
+    @Mock private lateinit var mediaDataManager: MediaDataManager
     @Mock private lateinit var stackLayout: NotificationStackScrollLayout
 
     private val testableResources = mContext.orCreateTestableResources
@@ -67,7 +69,9 @@
             NotificationStackSizeCalculator(
                 statusBarStateController = sysuiStatusBarStateController,
                 lockscreenShadeTransitionController = lockscreenShadeTransitionController,
-                testableResources.resources)
+                mediaDataManager = mediaDataManager,
+                testableResources.resources
+            )
     }
 
     @Test
@@ -76,7 +80,11 @@
 
         val maxNotifications =
             computeMaxKeyguardNotifications(
-                rows, spaceForNotifications = 0f, spaceForShelf = 0f, shelfHeight = 0f)
+                rows,
+                spaceForNotifications = 0f,
+                spaceForShelf = 0f,
+                shelfHeight = 0f
+            )
 
         assertThat(maxNotifications).isEqualTo(0)
     }
@@ -91,7 +99,8 @@
                 rows,
                 spaceForNotifications = Float.MAX_VALUE,
                 spaceForShelf = Float.MAX_VALUE,
-                shelfHeight)
+                shelfHeight
+            )
 
         assertThat(maxNotifications).isEqualTo(numberOfRows)
     }
@@ -111,6 +120,28 @@
     }
 
     @Test
+    fun computeMaxKeyguardNotifications_onLockscreenSpaceForMinHeightButNotIntrinsicHeight_returnsOne() {
+        setGapHeight(0f)
+        // No divider height since we're testing one element where index = 0
+
+        whenever(sysuiStatusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
+        whenever(lockscreenShadeTransitionController.fractionToShade).thenReturn(0f)
+
+        val row = createMockRow(10f, isSticky = true)
+        whenever(row.getMinHeight(any())).thenReturn(5)
+
+        val maxNotifications =
+            computeMaxKeyguardNotifications(
+                listOf(row),
+                /* spaceForNotifications= */ 5f,
+                /* spaceForShelf= */ 0f,
+                /* shelfHeight= */ 0f
+            )
+
+        assertThat(maxNotifications).isEqualTo(1)
+    }
+
+    @Test
     fun computeMaxKeyguardNotifications_spaceForTwo_returnsTwo() {
         setGapHeight(gapHeight)
         val shelfHeight = shelfHeight + dividerHeight
@@ -126,7 +157,11 @@
 
         val maxNotifications =
             computeMaxKeyguardNotifications(
-                rows, spaceForNotifications + 1, spaceForShelf, shelfHeight)
+                rows,
+                spaceForNotifications + 1,
+                spaceForShelf,
+                shelfHeight
+            )
 
         assertThat(maxNotifications).isEqualTo(2)
     }
@@ -136,24 +171,23 @@
         // Each row in separate section.
         setGapHeight(gapHeight)
 
-        val spaceForNotifications =
+        val notifSpace =
             listOf(
                     rowHeight,
                     dividerHeight + gapHeight + rowHeight,
                 )
                 .sum()
 
-        val spaceForShelf = dividerHeight + gapHeight + shelfHeight
-        val spaceUsed = spaceForNotifications + spaceForShelf
+        val shelfSpace = dividerHeight + gapHeight + shelfHeight
+        val spaceUsed = notifSpace + shelfSpace
         val rows =
             listOf(createMockRow(rowHeight), createMockRow(rowHeight), createMockRow(rowHeight))
 
         val maxNotifications =
-            computeMaxKeyguardNotifications(rows, spaceForNotifications, spaceForShelf, shelfHeight)
+            computeMaxKeyguardNotifications(rows, notifSpace, shelfSpace, shelfHeight)
         assertThat(maxNotifications).isEqualTo(2)
 
-        val height =
-            sizeCalculator.computeHeight(stackLayout, maxNotifications, this.shelfHeight)
+        val height = sizeCalculator.computeHeight(stackLayout, maxNotifications, this.shelfHeight)
         assertThat(height).isEqualTo(spaceUsed)
     }
 
@@ -170,11 +204,14 @@
         // test that we only use space required
         val maxNotifications =
             computeMaxKeyguardNotifications(
-                rows, spaceForNotifications + 1, spaceForShelf, shelfHeight)
+                rows,
+                spaceForNotifications + 1,
+                spaceForShelf,
+                shelfHeight
+            )
         assertThat(maxNotifications).isEqualTo(1)
 
-        val height =
-            sizeCalculator.computeHeight(stackLayout, maxNotifications, this.shelfHeight)
+        val height = sizeCalculator.computeHeight(stackLayout, maxNotifications, this.shelfHeight)
         assertThat(height).isEqualTo(spaceUsed)
     }
 
@@ -200,7 +237,65 @@
     }
 
     @Test
-    fun spaceNeeded_onLockscreen_usesMinHeight() {
+    fun getSpaceNeeded_onLockscreenEnoughSpaceStickyHun_intrinsicHeight() {
+        setGapHeight(0f)
+        // No divider height since we're testing one element where index = 0
+
+        val row = createMockRow(10f, isSticky = true)
+        whenever(row.getMinHeight(any())).thenReturn(5)
+
+        val space =
+            sizeCalculator.getSpaceNeeded(
+                row,
+                visibleIndex = 0,
+                previousView = null,
+                stack = stackLayout,
+                onLockscreen = true
+            )
+        assertThat(space.whenEnoughSpace).isEqualTo(10f)
+    }
+
+    @Test
+    fun getSpaceNeeded_onLockscreenEnoughSpaceNotStickyHun_minHeight() {
+        setGapHeight(0f)
+        // No divider height since we're testing one element where index = 0
+
+        val row = createMockRow(rowHeight)
+        whenever(row.heightWithoutLockscreenConstraints).thenReturn(10)
+        whenever(row.getMinHeight(any())).thenReturn(5)
+
+        val space =
+            sizeCalculator.getSpaceNeeded(
+                row,
+                visibleIndex = 0,
+                previousView = null,
+                stack = stackLayout,
+                onLockscreen = true
+            )
+        assertThat(space.whenEnoughSpace).isEqualTo(5)
+    }
+
+    @Test
+    fun getSpaceNeeded_onLockscreenSavingSpaceStickyHun_minHeight() {
+        setGapHeight(0f)
+        // No divider height since we're testing one element where index = 0
+
+        val expandableView = createMockRow(10f, isSticky = true)
+        whenever(expandableView.getMinHeight(any())).thenReturn(5)
+
+        val space =
+            sizeCalculator.getSpaceNeeded(
+                expandableView,
+                visibleIndex = 0,
+                previousView = null,
+                stack = stackLayout,
+                onLockscreen = true
+            )
+        assertThat(space.whenSavingSpace).isEqualTo(5)
+    }
+
+    @Test
+    fun getSpaceNeeded_onLockscreenSavingSpaceNotStickyHun_minHeight() {
         setGapHeight(0f)
         // No divider height since we're testing one element where index = 0
 
@@ -209,51 +304,34 @@
         whenever(expandableView.intrinsicHeight).thenReturn(10)
 
         val space =
-            sizeCalculator.spaceNeeded(
+            sizeCalculator.getSpaceNeeded(
                 expandableView,
                 visibleIndex = 0,
                 previousView = null,
                 stack = stackLayout,
-                onLockscreen = true)
-        assertThat(space).isEqualTo(5)
+                onLockscreen = true
+            )
+        assertThat(space.whenSavingSpace).isEqualTo(5)
     }
 
     @Test
-    fun spaceNeeded_fsiHunOnLockscreen_usesIntrinsicHeight() {
-        setGapHeight(0f)
-        // No divider height since we're testing one element where index = 0
-
-        val expandableView = createMockStickyRow(rowHeight)
-        whenever(expandableView.getMinHeight(any())).thenReturn(5)
-        whenever(expandableView.intrinsicHeight).thenReturn(10)
-
-        val space =
-                sizeCalculator.spaceNeeded(
-                        expandableView,
-                        visibleIndex = 0,
-                        previousView = null,
-                        stack = stackLayout,
-                        onLockscreen = true)
-        assertThat(space).isEqualTo(10)
-    }
-
-    @Test
-    fun spaceNeeded_notOnLockscreen_usesIntrinsicHeight() {
+    fun getSpaceNeeded_notOnLockscreen_intrinsicHeight() {
         setGapHeight(0f)
         // No divider height since we're testing one element where index = 0
 
         val expandableView = createMockRow(rowHeight)
-        whenever(expandableView.getMinHeight(any())).thenReturn(5)
-        whenever(expandableView.intrinsicHeight).thenReturn(10)
+        whenever(expandableView.getMinHeight(any())).thenReturn(1)
 
         val space =
-            sizeCalculator.spaceNeeded(
+            sizeCalculator.getSpaceNeeded(
                 expandableView,
                 visibleIndex = 0,
                 previousView = null,
                 stack = stackLayout,
-                onLockscreen = false)
-        assertThat(space).isEqualTo(10)
+                onLockscreen = false
+            )
+        assertThat(space.whenEnoughSpace).isEqualTo(rowHeight)
+        assertThat(space.whenSavingSpace).isEqualTo(rowHeight)
     }
 
     private fun computeMaxKeyguardNotifications(
@@ -264,7 +342,11 @@
     ): Int {
         setupChildren(rows)
         return sizeCalculator.computeMaxKeyguardNotifications(
-            stackLayout, spaceForNotifications, spaceForShelf, shelfHeight)
+            stackLayout,
+            spaceForNotifications,
+            spaceForShelf,
+            shelfHeight
+        )
     }
 
     private fun setupChildren(children: List<ExpandableView>) {
@@ -280,11 +362,13 @@
 
     private fun createMockRow(
         height: Float = rowHeight,
+        isSticky: Boolean = false,
         isRemoved: Boolean = false,
-        visibility: Int = VISIBLE
+        visibility: Int = VISIBLE,
     ): ExpandableNotificationRow {
         val row = mock(ExpandableNotificationRow::class.java)
         val entry = mock(NotificationEntry::class.java)
+        whenever(entry.isStickyAndNotDemoted).thenReturn(isSticky)
         val sbn = mock(StatusBarNotification::class.java)
         whenever(entry.sbn).thenReturn(sbn)
         whenever(row.entry).thenReturn(entry)
@@ -292,25 +376,7 @@
         whenever(row.visibility).thenReturn(visibility)
         whenever(row.getMinHeight(any())).thenReturn(height.toInt())
         whenever(row.intrinsicHeight).thenReturn(height.toInt())
-        return row
-    }
-
-    private fun createMockStickyRow(
-            height: Float = rowHeight,
-            isRemoved: Boolean = false,
-            visibility: Int = VISIBLE
-    ): ExpandableNotificationRow {
-        val row = mock(ExpandableNotificationRow::class.java)
-        val entry = mock(NotificationEntry::class.java)
-        whenever(entry.isStickyAndNotDemoted).thenReturn(true)
-
-        val sbn = mock(StatusBarNotification::class.java)
-        whenever(entry.sbn).thenReturn(sbn)
-        whenever(row.entry).thenReturn(entry)
-        whenever(row.isRemoved).thenReturn(isRemoved)
-        whenever(row.visibility).thenReturn(visibility)
-        whenever(row.getMinHeight(any())).thenReturn(height.toInt())
-        whenever(row.intrinsicHeight).thenReturn(height.toInt())
+        whenever(row.heightWithoutLockscreenConstraints).thenReturn(height.toInt())
         return row
     }
 
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..c83769d 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;
@@ -99,6 +101,7 @@
 import com.android.systemui.accessibility.floatingmenu.AccessibilityFloatingMenuController;
 import com.android.systemui.animation.ActivityLaunchAnimator;
 import com.android.systemui.assist.AssistManager;
+import com.android.systemui.biometrics.AuthRippleController;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.charging.WiredChargingRippleController;
 import com.android.systemui.classifier.FalsingCollectorFake;
@@ -136,6 +139,7 @@
 import com.android.systemui.shade.ShadeLogger;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.KeyguardIndicationController;
+import com.android.systemui.statusbar.LightRevealScrim;
 import com.android.systemui.statusbar.LockscreenShadeTransitionController;
 import com.android.systemui.statusbar.NotificationListener;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
@@ -147,6 +151,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;
@@ -228,10 +233,12 @@
     @Mock private IStatusBarService mBarService;
     @Mock private IDreamManager mDreamManager;
     @Mock private LightRevealScrimViewModel mLightRevealScrimViewModel;
+    @Mock private LightRevealScrim mLightRevealScrim;
     @Mock private ScrimController mScrimController;
     @Mock private DozeScrimController mDozeScrimController;
     @Mock private Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy;
     @Mock private BiometricUnlockController mBiometricUnlockController;
+    @Mock private AuthRippleController mAuthRippleController;
     @Mock private NotificationListener mNotificationListener;
     @Mock private KeyguardViewMediator mKeyguardViewMediator;
     @Mock private NotificationLockscreenUserManager mLockscreenUserManager;
@@ -342,6 +349,7 @@
         mFeatureFlags.set(Flags.WM_SHADE_ALLOW_BACK_GESTURE, true);
         // For the Shade to animate during the Back gesture, we must enable the animation flag.
         mFeatureFlags.set(Flags.WM_SHADE_ANIMATE_BACK_GESTURE, true);
+        mFeatureFlags.set(Flags.LIGHT_REVEAL_MIGRATION, true);
 
         IThermalService thermalService = mock(IThermalService.class);
         mPowerManager = new PowerManager(mContext, mPowerManagerService, thermalService,
@@ -387,7 +395,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 +458,7 @@
                 mock(FragmentService.class),
                 mLightBarController,
                 mAutoHideController,
+                new StatusBarInitializer(mStatusBarWindowController, emptySet()),
                 mStatusBarWindowController,
                 mStatusBarWindowStateController,
                 mKeyguardUpdateMonitor,
@@ -494,6 +502,7 @@
                 mScrimController,
                 mLockscreenWallpaperLazy,
                 mBiometricUnlockControllerLazy,
+                mAuthRippleController,
                 mDozeServiceHost,
                 mPowerManager, mScreenPinningRequest,
                 mDozeScrimController,
@@ -535,6 +544,7 @@
                 mDreamManager,
                 mCameraLauncherLazy,
                 () -> mLightRevealScrimViewModel,
+                mLightRevealScrim,
                 mAlternateBouncerInteractor,
                 mUserTracker,
                 () -> mFingerprintManager
@@ -562,7 +572,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 +1216,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 +1260,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 +1309,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 +1323,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/HeadsUpManagerPhoneTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
index 780e0c5..6fda56c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
@@ -116,7 +116,6 @@
                 .thenReturn(TEST_AUTO_DISMISS_TIME);
         when(mVSProvider.isReorderingAllowed()).thenReturn(true);
         mDependency.injectMockDependency(NotificationShadeWindowController.class);
-        mDependency.injectMockDependency(ConfigurationController.class);
         super.setUp();
 
         mHeadsUpManager = new TestableHeadsUpManagerPhone(
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 eb0b9b3..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,8 +52,9 @@
 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;
 import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
 import com.android.systemui.statusbar.policy.BatteryController;
@@ -120,14 +121,16 @@
     @Mock private CommandQueue mCommandQueue;
     @Mock private KeyguardLogger mLogger;
 
-    private TestNotificationPanelViewStateProvider mNotificationPanelViewStateProvider;
+    @Mock private NotificationMediaManager mNotificationMediaManager;
+
+    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);
 
@@ -155,7 +158,7 @@
                 mStatusBarIconController,
                 mIconManagerFactory,
                 mBatteryMeterViewController,
-                mNotificationPanelViewStateProvider,
+                mShadeViewStateProvider,
                 mKeyguardStateController,
                 mKeyguardBypassController,
                 mKeyguardUpdateMonitor,
@@ -167,7 +170,8 @@
                 mSecureSettings,
                 mCommandQueue,
                 mFakeExecutor,
-                mLogger
+                mLogger,
+                mNotificationMediaManager
         );
     }
 
@@ -354,7 +358,7 @@
         mController.onViewAttached();
         updateStateToKeyguard();
 
-        mNotificationPanelViewStateProvider.setPanelViewExpandedHeight(0);
+        mShadeViewStateProvider.setPanelViewExpandedHeight(0);
 
         mController.updateViewState();
 
@@ -366,7 +370,7 @@
         mController.onViewAttached();
         updateStateToKeyguard();
 
-        mNotificationPanelViewStateProvider.setLockscreenShadeDragProgress(1f);
+        mShadeViewStateProvider.setLockscreenShadeDragProgress(1f);
 
         mController.updateViewState();
 
@@ -447,7 +451,7 @@
         updateStateToKeyguard();
         mKeyguardStatusBarView.setVisibility(View.VISIBLE);
 
-        mNotificationPanelViewStateProvider.setShouldHeadsUpBeVisible(true);
+        mShadeViewStateProvider.setShouldHeadsUpBeVisible(true);
         mController.updateForHeadsUp(/* animate= */ false);
 
         assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.INVISIBLE);
@@ -459,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);
@@ -587,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/LetterboxBackgroundProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProviderTest.kt
index a2828d33..1cc0bd3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProviderTest.kt
@@ -25,7 +25,6 @@
 import android.view.IWindowManager
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
-import com.android.systemui.dump.DumpManager
 import com.android.systemui.util.concurrency.FakeExecutor
 import com.android.systemui.util.mockito.eq
 import com.android.systemui.util.time.FakeSystemClock
@@ -52,7 +51,6 @@
     @get:Rule var expect: Expect = Expect.create()
 
     @Mock private lateinit var windowManager: IWindowManager
-    @Mock private lateinit var dumpManager: DumpManager
     @Mock private lateinit var wallpaperManager: WallpaperManager
 
     private lateinit var provider: LetterboxBackgroundProvider
@@ -65,8 +63,7 @@
 
         setUpWallpaperManager()
         provider =
-            LetterboxBackgroundProvider(
-                windowManager, fakeExecutor, dumpManager, wallpaperManager, mainHandler)
+            LetterboxBackgroundProvider(windowManager, fakeExecutor, wallpaperManager, mainHandler)
     }
 
     private fun setUpWallpaperManager() {
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/SystemUIDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java
index 6c0f6c2..07ffd11 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java
@@ -14,6 +14,8 @@
 
 package com.android.systemui.statusbar.phone;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
 
@@ -44,6 +46,8 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.util.concurrent.atomic.AtomicBoolean;
+
 @RunWith(AndroidTestingRunner.class)
 @RunWithLooper
 @SmallTest
@@ -109,4 +113,31 @@
         dialog.dismiss();
         assertFalse(dialog.isShowing());
     }
+
+    @Test public void startAndStopAreCalled() {
+        AtomicBoolean calledStart = new AtomicBoolean(false);
+        AtomicBoolean calledStop = new AtomicBoolean(false);
+        SystemUIDialog dialog = new SystemUIDialog(mContext) {
+            @Override
+            protected void start() {
+                calledStart.set(true);
+            }
+
+            @Override
+            protected void stop() {
+                calledStop.set(true);
+            }
+        };
+
+        assertThat(calledStart.get()).isFalse();
+        assertThat(calledStop.get()).isFalse();
+
+        dialog.show();
+        assertThat(calledStart.get()).isTrue();
+        assertThat(calledStop.get()).isFalse();
+
+        dialog.dismiss();
+        assertThat(calledStart.get()).isTrue();
+        assertThat(calledStop.get()).isTrue();
+    }
 }
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 746c92e..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
@@ -16,18 +16,16 @@
 
 package com.android.systemui.statusbar.phone
 
-import android.animation.Animator
 import android.os.Handler
 import android.os.PowerManager
 import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper.RunWithLooper
-import android.view.View
 import androidx.test.filters.SmallTest
 import com.android.internal.jank.InteractionJankMonitor
 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
@@ -39,10 +37,8 @@
 import org.junit.runner.RunWith
 import org.mockito.ArgumentCaptor
 import org.mockito.Mock
-import org.mockito.Mockito
 import org.mockito.Mockito.anyLong
 import org.mockito.Mockito.never
-import org.mockito.Mockito.spy
 import org.mockito.Mockito.times
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.`when`
@@ -63,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
@@ -95,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
@@ -111,27 +107,6 @@
         controller.onStartedWakingUp()
     }
 
-    @Test
-    fun testAnimClearsEndListener() {
-        val keyguardView = View(context)
-        val animator = spy(keyguardView.animate())
-        val keyguardSpy = spy(keyguardView)
-        Mockito.`when`(keyguardSpy.animate()).thenReturn(animator)
-        val listener = ArgumentCaptor.forClass(Animator.AnimatorListener::class.java)
-        val endAction = ArgumentCaptor.forClass(Runnable::class.java)
-        controller.animateInKeyguard(keyguardSpy, Runnable {})
-        Mockito.verify(animator).setListener(listener.capture())
-        Mockito.verify(animator).withEndAction(endAction.capture())
-
-        // Verify that the listener is cleared if we cancel it.
-        listener.value.onAnimationCancel(null)
-        Mockito.verify(animator).setListener(null)
-
-        // Verify that the listener is also cleared if the end action is triggered.
-        endAction.value.run()
-        verify(animator, times(2)).setListener(null)
-    }
-
     /**
      * The AOD UI is shown during the screen off animation, after a delay to allow the light reveal
      * animation to start. If the device is woken up during the screen off, we should *never* do
@@ -152,7 +127,7 @@
 
         callbackCaptor.value.run()
 
-        verify(notificationPanelViewController, times(1)).showAodUi()
+        verify(shadeViewController, times(1)).showAodUi()
     }
 
     /**
@@ -174,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/FakeMobileIconsInteractor.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconsInteractor.kt
index 3ced7b2..b2bbcfd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconsInteractor.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconsInteractor.kt
@@ -49,6 +49,8 @@
             FIVE_G_OVERRIDE_KEY to TelephonyIcons.NR_5G,
         )
 
+    private val interactorCache: MutableMap<Int, FakeMobileIconInteractor> = mutableMapOf()
+
     override val isDefaultConnectionFailed = MutableStateFlow(false)
 
     override val filteredSubscriptions = MutableStateFlow<List<SubscriptionModel>>(listOf())
@@ -75,7 +77,15 @@
 
     /** Always returns a new fake interactor */
     override fun createMobileConnectionInteractorForSubId(subId: Int): MobileIconInteractor {
-        return FakeMobileIconInteractor(tableLogBuffer)
+        return FakeMobileIconInteractor(tableLogBuffer).also { interactorCache[subId] = it }
+    }
+
+    /**
+     * Returns the most recently created interactor for the given subId, or null if an interactor
+     * has never been created for that sub.
+     */
+    fun getInteractorForSubId(subId: Int): FakeMobileIconInteractor? {
+        return interactorCache[subId]
     }
 
     companion object {
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 ddb7f4d..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
@@ -17,6 +17,7 @@
 package com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel
 
 import androidx.test.filters.SmallTest
+import com.android.settingslib.mobile.TelephonyIcons
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.statusbar.phone.StatusBarLocation
 import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
@@ -24,6 +25,7 @@
 import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
 import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
 import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.FakeMobileIconsInteractor
+import com.android.systemui.statusbar.pipeline.mobile.domain.model.NetworkTypeIconModel
 import com.android.systemui.statusbar.pipeline.mobile.ui.MobileViewLogger
 import com.android.systemui.statusbar.pipeline.mobile.ui.VerboseMobileViewLogger
 import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy
@@ -32,9 +34,8 @@
 import com.android.systemui.util.mockito.mock
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.flow.SharingStarted
-import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.flow.stateIn
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
 import kotlinx.coroutines.test.TestScope
 import kotlinx.coroutines.test.UnconfinedTestDispatcher
 import kotlinx.coroutines.test.runTest
@@ -69,14 +70,8 @@
                 FakeConnectivityRepository(),
             )
 
-        val subscriptionIdsFlow =
-            interactor.filteredSubscriptions
-                .map { subs -> subs.map { it.subscriptionId } }
-                .stateIn(testScope.backgroundScope, SharingStarted.WhileSubscribed(), listOf())
-
         underTest =
             MobileIconsViewModel(
-                subscriptionIdsFlow,
                 logger,
                 verboseLogger,
                 interactor,
@@ -90,7 +85,33 @@
     }
 
     @Test
-    fun `caching - mobile icon view model is reused for same sub id`() =
+    fun subscriptionIdsFlow_matchesInteractor() =
+        testScope.runTest {
+            var latest: List<Int>? = null
+            val job = underTest.subscriptionIdsFlow.onEach { latest = it }.launchIn(this)
+
+            interactor.filteredSubscriptions.value =
+                listOf(
+                    SubscriptionModel(subscriptionId = 1, isOpportunistic = false),
+                )
+            assertThat(latest).isEqualTo(listOf(1))
+
+            interactor.filteredSubscriptions.value =
+                listOf(
+                    SubscriptionModel(subscriptionId = 2, isOpportunistic = false),
+                    SubscriptionModel(subscriptionId = 5, isOpportunistic = true),
+                    SubscriptionModel(subscriptionId = 7, isOpportunistic = true),
+                )
+            assertThat(latest).isEqualTo(listOf(2, 5, 7))
+
+            interactor.filteredSubscriptions.value = emptyList()
+            assertThat(latest).isEmpty()
+
+            job.cancel()
+        }
+
+    @Test
+    fun caching_mobileIconViewModelIsReusedForSameSubId() =
         testScope.runTest {
             val model1 = underTest.viewModelForSub(1, StatusBarLocation.HOME)
             val model2 = underTest.viewModelForSub(1, StatusBarLocation.QS)
@@ -99,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)
@@ -116,8 +137,179 @@
             assertThat(underTest.mobileIconSubIdCache).containsExactly(2, model2.commonImpl)
         }
 
+    @Test
+    fun firstMobileSubShowingNetworkTypeIcon_noSubs_false() =
+        testScope.runTest {
+            var latest: Boolean? = null
+            val job =
+                underTest.firstMobileSubShowingNetworkTypeIcon.onEach { latest = it }.launchIn(this)
+
+            interactor.filteredSubscriptions.value = emptyList()
+
+            assertThat(latest).isFalse()
+
+            job.cancel()
+        }
+
+    @Test
+    fun firstMobileSubShowingNetworkTypeIcon_oneSub_notShowingRat_false() =
+        testScope.runTest {
+            var latest: Boolean? = null
+            val job =
+                underTest.firstMobileSubShowingNetworkTypeIcon.onEach { latest = it }.launchIn(this)
+
+            interactor.filteredSubscriptions.value = listOf(SUB_1)
+            // The unknown icon group doesn't show a RAT
+            interactor.getInteractorForSubId(1)!!.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.UNKNOWN)
+
+            assertThat(latest).isFalse()
+
+            job.cancel()
+        }
+
+    @Test
+    fun firstMobileSubShowingNetworkTypeIcon_oneSub_showingRat_true() =
+        testScope.runTest {
+            var latest: Boolean? = null
+            val job =
+                underTest.firstMobileSubShowingNetworkTypeIcon.onEach { latest = it }.launchIn(this)
+
+            interactor.filteredSubscriptions.value = listOf(SUB_1)
+            // The 3G icon group will show a RAT
+            interactor.getInteractorForSubId(1)!!.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.THREE_G)
+
+            assertThat(latest).isTrue()
+
+            job.cancel()
+        }
+
+    @Test
+    fun firstMobileSubShowingNetworkTypeIcon_updatesAsSubUpdates() =
+        testScope.runTest {
+            var latest: Boolean? = null
+            val job =
+                underTest.firstMobileSubShowingNetworkTypeIcon.onEach { latest = it }.launchIn(this)
+
+            interactor.filteredSubscriptions.value = listOf(SUB_1)
+            val sub1Interactor = interactor.getInteractorForSubId(1)!!
+
+            sub1Interactor.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.THREE_G)
+            assertThat(latest).isTrue()
+
+            sub1Interactor.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.UNKNOWN)
+            assertThat(latest).isFalse()
+
+            sub1Interactor.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.LTE)
+            assertThat(latest).isTrue()
+
+            job.cancel()
+        }
+
+    @Test
+    fun firstMobileSubShowingNetworkTypeIcon_multipleSubs_lastSubNotShowingRat_false() =
+        testScope.runTest {
+            var latest: Boolean? = null
+            val job =
+                underTest.firstMobileSubShowingNetworkTypeIcon.onEach { latest = it }.launchIn(this)
+
+            interactor.filteredSubscriptions.value = listOf(SUB_1, SUB_2)
+            interactor.getInteractorForSubId(1)?.networkTypeIconGroup?.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.THREE_G)
+            interactor.getInteractorForSubId(2)!!.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.UNKNOWN)
+
+            assertThat(latest).isFalse()
+
+            job.cancel()
+        }
+
+    @Test
+    fun firstMobileSubShowingNetworkTypeIcon_multipleSubs_lastSubShowingRat_true() =
+        testScope.runTest {
+            var latest: Boolean? = null
+            val job =
+                underTest.firstMobileSubShowingNetworkTypeIcon.onEach { latest = it }.launchIn(this)
+
+            interactor.filteredSubscriptions.value = listOf(SUB_1, SUB_2)
+            interactor.getInteractorForSubId(1)?.networkTypeIconGroup?.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.UNKNOWN)
+            interactor.getInteractorForSubId(2)!!.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.THREE_G)
+
+            assertThat(latest).isTrue()
+            job.cancel()
+        }
+
+    @Test
+    fun firstMobileSubShowingNetworkTypeIcon_subListUpdates_valAlsoUpdates() =
+        testScope.runTest {
+            var latest: Boolean? = null
+            val job =
+                underTest.firstMobileSubShowingNetworkTypeIcon.onEach { latest = it }.launchIn(this)
+
+            interactor.filteredSubscriptions.value = listOf(SUB_1, SUB_2)
+            interactor.getInteractorForSubId(1)?.networkTypeIconGroup?.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.UNKNOWN)
+            interactor.getInteractorForSubId(2)!!.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.THREE_G)
+
+            assertThat(latest).isTrue()
+
+            // WHEN the sub list gets new subscriptions where the last subscription is not showing
+            // the network type icon
+            interactor.filteredSubscriptions.value = listOf(SUB_1, SUB_2, SUB_3)
+            interactor.getInteractorForSubId(3)!!.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.UNKNOWN)
+
+            // THEN the flow updates
+            assertThat(latest).isFalse()
+
+            job.cancel()
+        }
+
+    @Test
+    fun firstMobileSubShowingNetworkTypeIcon_subListReorders_valAlsoUpdates() =
+        testScope.runTest {
+            var latest: Boolean? = null
+            val job =
+                underTest.firstMobileSubShowingNetworkTypeIcon.onEach { latest = it }.launchIn(this)
+
+            interactor.filteredSubscriptions.value = listOf(SUB_1, SUB_2)
+            // Immediately switch the order so that we've created both interactors
+            interactor.filteredSubscriptions.value = listOf(SUB_2, SUB_1)
+            val sub1Interactor = interactor.getInteractorForSubId(1)!!
+            val sub2Interactor = interactor.getInteractorForSubId(2)!!
+
+            interactor.filteredSubscriptions.value = listOf(SUB_1, SUB_2)
+            sub1Interactor.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.UNKNOWN)
+            sub2Interactor.networkTypeIconGroup.value =
+                NetworkTypeIconModel.DefaultIcon(TelephonyIcons.THREE_G)
+            assertThat(latest).isTrue()
+
+            // WHEN sub1 becomes last and sub1 has no network type icon
+            interactor.filteredSubscriptions.value = listOf(SUB_2, SUB_1)
+
+            // THEN the flow updates
+            assertThat(latest).isFalse()
+
+            // WHEN sub2 becomes last and sub2 has a network type icon
+            interactor.filteredSubscriptions.value = listOf(SUB_1, SUB_2)
+
+            // THEN the flow updates
+            assertThat(latest).isTrue()
+
+            job.cancel()
+        }
+
     companion object {
         private val SUB_1 = SubscriptionModel(subscriptionId = 1, isOpportunistic = false)
         private val SUB_2 = SubscriptionModel(subscriptionId = 2, isOpportunistic = false)
+        private val SUB_3 = SubscriptionModel(subscriptionId = 3, isOpportunistic = false)
     }
 }
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/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
index 5c19108..0d51af2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
@@ -50,6 +50,7 @@
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.MutableStateFlow
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -98,12 +99,12 @@
         val viewModelCommon =
             WifiViewModel(
                 airplaneModeViewModel,
+                shouldShowSignalSpacerProvider = { MutableStateFlow(false) },
                 connectivityConstants,
                 context,
                 tableLogBuffer,
                 interactor,
                 scope,
-                statusBarPipelineFlags,
                 wifiConstants,
             )
         viewModel =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt
index ffe990b..e6724d8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt
@@ -27,7 +27,6 @@
 import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_FULL_ICONS
 import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_INTERNET_ICONS
 import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_NETWORK
-import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
 import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
 import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
 import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel
@@ -46,6 +45,7 @@
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.cancel
+import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.runBlocking
 import kotlinx.coroutines.yield
@@ -66,7 +66,6 @@
 
     private lateinit var underTest: WifiViewModel
 
-    @Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags
     @Mock private lateinit var tableLogBuffer: TableLogBuffer
     @Mock private lateinit var connectivityConstants: ConnectivityConstants
     @Mock private lateinit var wifiConstants: WifiConstants
@@ -121,12 +120,12 @@
             underTest =
                 WifiViewModel(
                     airplaneModeViewModel,
+                    shouldShowSignalSpacerProvider = { MutableStateFlow(false) },
                     connectivityConstants,
                     context,
                     tableLogBuffer,
                     interactor,
                     scope,
-                    statusBarPipelineFlags,
                     wifiConstants,
                 )
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt
index 802e360..0e303b2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt
@@ -39,8 +39,8 @@
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.cancel
+import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
 import kotlinx.coroutines.runBlocking
@@ -53,7 +53,6 @@
 import org.mockito.MockitoAnnotations
 
 @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
-@OptIn(ExperimentalCoroutinesApi::class)
 @SmallTest
 class WifiViewModelTest : SysuiTestCase() {
 
@@ -68,6 +67,7 @@
     private lateinit var wifiRepository: FakeWifiRepository
     private lateinit var interactor: WifiInteractor
     private lateinit var airplaneModeViewModel: AirplaneModeViewModel
+    private val shouldShowSignalSpacerProviderFlow = MutableStateFlow(false)
     private lateinit var scope: CoroutineScope
 
     @Before
@@ -473,6 +473,34 @@
             job.cancel()
         }
 
+    @Test
+    fun signalSpacer_firstSubNotShowingNetworkTypeIcon_outputsFalse() =
+        runBlocking(IMMEDIATE) {
+            var latest: Boolean? = null
+            val job = underTest.isSignalSpacerVisible.onEach { latest = it }.launchIn(this)
+
+            shouldShowSignalSpacerProviderFlow.value = false
+            yield()
+
+            assertThat(latest).isFalse()
+
+            job.cancel()
+        }
+
+    @Test
+    fun signalSpacer_firstSubIsShowingNetworkTypeIcon_outputsTrue() =
+        runBlocking(IMMEDIATE) {
+            var latest: Boolean? = null
+            val job = underTest.isSignalSpacerVisible.onEach { latest = it }.launchIn(this)
+
+            shouldShowSignalSpacerProviderFlow.value = true
+            yield()
+
+            assertThat(latest).isTrue()
+
+            job.cancel()
+        }
+
     private fun createAndSetViewModel() {
         // [WifiViewModel] creates its flows as soon as it's instantiated, and some of those flow
         // creations rely on certain config values that we mock out in individual tests. This method
@@ -480,12 +508,12 @@
         underTest =
             WifiViewModel(
                 airplaneModeViewModel,
+                { shouldShowSignalSpacerProviderFlow },
                 connectivityConstants,
                 context,
                 tableLogBuffer,
                 interactor,
                 scope,
-                statusBarPipelineFlags,
                 wifiConstants,
             )
     }
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/ExtensionControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java
index 71ac7c4..683136d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java
@@ -45,6 +45,8 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 
 import java.util.Map;
 import java.util.function.Consumer;
@@ -53,16 +55,18 @@
 @SmallTest
 public class ExtensionControllerImplTest extends SysuiTestCase {
 
+    @Mock
+    private ConfigurationController mConfigurationController;
+
     private PluginManager mPluginManager;
     private TunerService mTunerService;
     private ExtensionController mExtensionController;
-    private ConfigurationController mConfigurationController;
 
     @Before
     public void setup() {
+        MockitoAnnotations.initMocks(this);
         mPluginManager = mDependency.injectMockDependency(PluginManager.class);
         mTunerService = mDependency.injectMockDependency(TunerService.class);
-        mConfigurationController = mDependency.injectMockDependency(ConfigurationController.class);
         mExtensionController = new ExtensionControllerImpl(
                 mContext,
                 mock(LeakDetector.class),
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/CsdWarningDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/CsdWarningDialogTest.java
new file mode 100644
index 0000000..9cf3e44
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/volume/CsdWarningDialogTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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.volume;
+
+import static android.media.AudioManager.CSD_WARNING_DOSE_REACHED_1X;
+import static android.media.AudioManager.CSD_WARNING_DOSE_REPEATED_5X;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.media.AudioManager;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import com.android.internal.messages.nano.SystemMessageProto;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.util.concurrency.FakeExecutor;
+import com.android.systemui.util.time.FakeSystemClock;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+public class CsdWarningDialogTest extends SysuiTestCase {
+
+    private NotificationManager mNotificationManager;
+    private AudioManager mAudioManager;
+
+    @Before
+    public void setup() {
+        mNotificationManager = mock(NotificationManager.class);
+        getContext().addMockSystemService(NotificationManager.class, mNotificationManager);
+
+        mAudioManager = mock(AudioManager.class);
+        getContext().addMockSystemService(AudioManager.class, mAudioManager);
+    }
+
+    @Test
+    public void create1XCsdDialogAndWait_sendsNotification() {
+        FakeExecutor executor =  new FakeExecutor(new FakeSystemClock());
+        // instantiate directly instead of via factory; we don't want executor to be @Background
+        CsdWarningDialog dialog = new CsdWarningDialog(CSD_WARNING_DOSE_REACHED_1X, mContext,
+                mAudioManager, mNotificationManager, executor, null);
+
+        dialog.show();
+        executor.advanceClockToLast();
+        executor.runAllReady();
+        dialog.dismiss();
+
+        verify(mNotificationManager).notify(
+                eq(SystemMessageProto.SystemMessage.NOTE_CSD_LOWER_AUDIO), any(Notification.class));
+    }
+
+    @Test
+    public void create5XCsdDiSalogAndWait_willNotSendNotification() {
+        FakeExecutor executor =  new FakeExecutor(new FakeSystemClock());
+        CsdWarningDialog dialog = new CsdWarningDialog(CSD_WARNING_DOSE_REPEATED_5X, mContext,
+                mAudioManager, mNotificationManager, executor, null);
+
+        dialog.show();
+        executor.advanceClockToLast();
+        executor.runAllReady();
+        dialog.dismiss();
+
+        verify(mNotificationManager, never()).notify(
+                eq(SystemMessageProto.SystemMessage.NOTE_CSD_LOWER_AUDIO), any(Notification.class));
+    }
+}
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 d419095..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;
@@ -102,6 +103,15 @@
     InteractionJankMonitor mInteractionJankMonitor;
     @Mock
     private DumpManager mDumpManager;
+    @Mock CsdWarningDialog mCsdWarningDialog;
+
+    private final CsdWarningDialog.Factory mCsdWarningDialogFactory =
+            new CsdWarningDialog.Factory() {
+        @Override
+        public CsdWarningDialog create(int warningType, Runnable onCleanup) {
+            return mCsdWarningDialog;
+        }
+    };
 
     @Before
     public void setup() throws Exception {
@@ -124,6 +134,7 @@
                 mInteractionJankMonitor,
                 mDeviceConfigProxy,
                 mExecutor,
+                mCsdWarningDialogFactory,
                 mDumpManager
             );
         mDialog.init(0, null);
@@ -352,6 +363,21 @@
         mDialog.getDialogView().animate().cancel();
     }
 
+    @Test
+    public void showCsdWarning_dialogShown() {
+        mDialog.showCsdWarningH(AudioManager.CSD_WARNING_DOSE_REACHED_1X,
+                CsdWarningDialog.NO_ACTION_TIMEOUT_MS);
+
+        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/WalletContextualLocationsServiceTest.kt b/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/WalletContextualLocationsServiceTest.kt
new file mode 100644
index 0000000..af1d788
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/WalletContextualLocationsServiceTest.kt
@@ -0,0 +1,128 @@
+package com.android.systemui.wallet.controller
+
+import android.app.PendingIntent
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.drawable.Icon
+import android.os.Looper
+import android.service.quickaccesswallet.WalletCard
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.flags.FakeFeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.util.mockito.whenever
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.test.TestCoroutineScope
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.update
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.Mock
+import org.mockito.Mockito.anySet
+import org.mockito.Mockito.doNothing
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+
+@RunWith(JUnit4::class)
+@SmallTest
+@kotlinx.coroutines.ExperimentalCoroutinesApi
+class WalletContextualLocationsServiceTest : SysuiTestCase() {
+    @Mock private lateinit var controller: WalletContextualSuggestionsController
+    private var featureFlags = FakeFeatureFlags()
+    private lateinit var underTest: WalletContextualLocationsService
+    private lateinit var testScope: TestScope
+    private var listenerRegisteredCount: Int = 0
+    private val listener: IWalletCardsUpdatedListener.Stub = object : IWalletCardsUpdatedListener.Stub() {
+        override fun registerNewWalletCards(cards: List<WalletCard?>) {
+            listenerRegisteredCount++
+        }
+    }
+
+    @Before
+    @kotlinx.coroutines.ExperimentalCoroutinesApi
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        doReturn(fakeWalletCards).whenever(controller).allWalletCards
+        doNothing().whenever(controller).setSuggestionCardIds(anySet())
+
+        if (Looper.myLooper() == null) Looper.prepare()
+
+        testScope = TestScope()
+        featureFlags.set(Flags.ENABLE_WALLET_CONTEXTUAL_LOYALTY_CARDS, true)
+        listenerRegisteredCount = 0
+
+        underTest = WalletContextualLocationsService(controller, featureFlags, testScope.backgroundScope)
+    }
+
+    @Test
+    @kotlinx.coroutines.ExperimentalCoroutinesApi
+    fun addListener() = testScope.runTest {
+        underTest.addWalletCardsUpdatedListenerInternal(listener)
+        assertThat(listenerRegisteredCount).isEqualTo(1)
+  }
+
+    @Test
+    @kotlinx.coroutines.ExperimentalCoroutinesApi
+    fun addStoreLocations() = testScope.runTest {
+        underTest.onWalletContextualLocationsStateUpdatedInternal(ArrayList<String>())
+        verify(controller, times(1)).setSuggestionCardIds(anySet())
+    }
+
+    @Test
+    @kotlinx.coroutines.ExperimentalCoroutinesApi
+    fun updateListenerAndLocationsState() = testScope.runTest {
+        // binds to the service and adds a listener
+        val underTestStub = getInterface
+        underTestStub.addWalletCardsUpdatedListener(listener)
+        assertThat(listenerRegisteredCount).isEqualTo(1)
+
+        // sends a list of card IDs to the controller
+        underTestStub.onWalletContextualLocationsStateUpdated(ArrayList<String>())
+        verify(controller, times(1)).setSuggestionCardIds(anySet())
+
+        // adds another listener
+        fakeWalletCards.update{ updatedFakeWalletCards }
+        runCurrent()
+        assertThat(listenerRegisteredCount).isEqualTo(2)
+
+        // sends another list of card IDs to the controller
+        underTestStub.onWalletContextualLocationsStateUpdated(ArrayList<String>())
+        verify(controller, times(2)).setSuggestionCardIds(anySet())
+    }
+
+    private val fakeWalletCards: MutableStateFlow<List<WalletCard>>
+        get() {
+            val intent = Intent(getContext(), WalletContextualLocationsService::class.java)
+            val pi: PendingIntent = PendingIntent.getActivity(getContext(), 0, intent, PendingIntent.FLAG_IMMUTABLE)
+            val icon: Icon = Icon.createWithBitmap(Bitmap.createBitmap(70, 50, Bitmap.Config.ARGB_8888))
+            val walletCards: ArrayList<WalletCard> = ArrayList<WalletCard>()
+            walletCards.add(WalletCard.Builder("card1", icon, "card", pi).build())
+            walletCards.add(WalletCard.Builder("card2", icon, "card", pi).build())
+            return MutableStateFlow<List<WalletCard>>(walletCards)
+        }
+
+    private val updatedFakeWalletCards: List<WalletCard>
+        get() {
+            val intent = Intent(getContext(), WalletContextualLocationsService::class.java)
+            val pi: PendingIntent = PendingIntent.getActivity(getContext(), 0, intent, PendingIntent.FLAG_IMMUTABLE)
+            val icon: Icon = Icon.createWithBitmap(Bitmap.createBitmap(70, 50, Bitmap.Config.ARGB_8888))
+            val walletCards: ArrayList<WalletCard> = ArrayList<WalletCard>()
+            walletCards.add(WalletCard.Builder("card3", icon, "card", pi).build())
+            return walletCards
+        }
+
+    private val getInterface: IWalletContextualLocationsService
+        get() {
+            val intent = Intent()
+            return IWalletContextualLocationsService.Stub.asInterface(underTest.onBind(intent))
+        }
+}
\ No newline at end of file
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..1510ee8 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;
@@ -117,6 +115,7 @@
 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
 import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider;
 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptLogger;
+import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderWrapper;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
 import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
 import com.android.systemui.statusbar.phone.DozeParameters;
@@ -400,7 +399,7 @@
                 mock(INotificationManager.class),
                 mIDreamManager,
                 mVisibilityProvider,
-                interruptionStateProvider,
+                new NotificationInterruptStateProviderWrapper(interruptionStateProvider),
                 mZenModeController,
                 mLockscreenUserManager,
                 mCommonNotifCollection,
@@ -1227,8 +1226,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 +1255,7 @@
         stackView.showManageMenu(true);
         assertSysuiStates(true /* stackExpanded */, true /* mangeMenuExpanded */);
         assertTrue(stackView.isManageMenuSettingsVisible());
+        assertTrue(stackView.isManageMenuDontBubbleVisible());
     }
 
     @Test
@@ -1274,6 +1273,7 @@
         stackView.showManageMenu(true);
         assertSysuiStates(true /* stackExpanded */, true /* mangeMenuExpanded */);
         assertFalse(stackView.isManageMenuSettingsVisible());
+        assertFalse(stackView.isManageMenuDontBubbleVisible());
     }
 
     @Test
@@ -1734,13 +1734,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 +1754,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 +1763,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 +1780,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 +1790,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 +1820,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/src/com/android/systemui/wmshell/WMShellTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java
index 8cae998..9de7a87 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java
@@ -128,7 +128,7 @@
     @Test
     public void initDesktopMode_registersListener() {
         mWMShell.initDesktopMode(mDesktopMode);
-        verify(mDesktopMode).addListener(
+        verify(mDesktopMode).addVisibleTasksListener(
                 any(DesktopModeTaskRepository.VisibleTasksListener.class),
                 any(Executor.class));
     }
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/core/java/com/android/internal/expresslog/Utils.java b/packages/SystemUI/tests/utils/src/com/android/systemui/accessibility/data/repository/FakeAccessibilityRepository.kt
similarity index 69%
copy from core/java/com/android/internal/expresslog/Utils.java
copy to packages/SystemUI/tests/utils/src/com/android/systemui/accessibility/data/repository/FakeAccessibilityRepository.kt
index d82192f..8444c7b 100644
--- a/core/java/com/android/internal/expresslog/Utils.java
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/accessibility/data/repository/FakeAccessibilityRepository.kt
@@ -14,8 +14,10 @@
  * limitations under the License.
  */
 
-package com.android.internal.expresslog;
+package com.android.systemui.accessibility.data.repository
 
-final class Utils {
-    static native long hashString(String stringToHash);
-}
+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/keyguard/data/repository/FakeDeviceEntryFaceAuthRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeDeviceEntryFaceAuthRepository.kt
index c08ecd0..738f09d 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeDeviceEntryFaceAuthRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeDeviceEntryFaceAuthRepository.kt
@@ -24,7 +24,6 @@
 import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.asStateFlow
 import kotlinx.coroutines.flow.filterNotNull
-import kotlinx.coroutines.flow.map
 
 class FakeDeviceEntryFaceAuthRepository : DeviceEntryFaceAuthRepository {
 
@@ -46,14 +45,19 @@
     private val _runningAuthRequest = MutableStateFlow<Pair<FaceAuthUiEvent, Boolean>?>(null)
     val runningAuthRequest: StateFlow<Pair<FaceAuthUiEvent, Boolean>?> =
         _runningAuthRequest.asStateFlow()
-    override val isAuthRunning = _runningAuthRequest.map { it != null }
+
+    private val _isAuthRunning = MutableStateFlow(false)
+    override val isAuthRunning: StateFlow<Boolean> = _isAuthRunning
+
     override val isBypassEnabled = MutableStateFlow(false)
 
     override suspend fun authenticate(uiEvent: FaceAuthUiEvent, fallbackToDetection: Boolean) {
         _runningAuthRequest.value = uiEvent to fallbackToDetection
+        _isAuthRunning.value = true
     }
 
     override fun cancel() {
+        _isAuthRunning.value = false
         _runningAuthRequest.value = null
     }
 }
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/tests/utils/src/com/android/systemui/widget/FakeListAdapter.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/widget/FakeListAdapter.kt
new file mode 100644
index 0000000..231373b
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/widget/FakeListAdapter.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.widget
+
+import android.view.View
+import android.view.ViewGroup
+import android.widget.BaseAdapter
+
+class FakeListAdapter(private var items: List<FakeListAdapterItem> = emptyList()) : BaseAdapter() {
+
+    fun setItems(items: List<FakeListAdapterItem>) {
+        this.items = items
+        notifyDataSetChanged()
+    }
+
+    override fun getCount(): Int = items.size
+
+    override fun getItem(position: Int): Any = items[position].data
+
+    override fun getItemId(position: Int): Long = items[position].id
+
+    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View =
+        items[position].view(position, convertView, parent)
+
+    class FakeListAdapterItem(
+        /** Result returned in [Adapter#getView] */
+        val view: (position: Int, convertView: View?, parent: ViewGroup?) -> View,
+        /** Returned in [Adapter#getItemId] */
+        val id: Long = 0,
+        /** Returned in [Adapter#getItem] */
+        val data: Any = Unit,
+    )
+}
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 0b019d1..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,8 +34,9 @@
         }
 
     private var inProgress = false
+    private var receivedProgressEvent = false
 
-    private var processedProgress: Float = 0.0f
+    private var processedProgress: Float = 1.0f
         set(newProgress) {
             if (inProgress) {
                 logCounter({ "$TAG#filtered_progress" }, 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/packages/overlays/Android.mk b/packages/overlays/Android.mk
index cbca3f0..a41d0e5 100644
--- a/packages/overlays/Android.mk
+++ b/packages/overlays/Android.mk
@@ -32,6 +32,7 @@
 	NavigationBarModeGesturalOverlayWideBack \
 	NavigationBarModeGesturalOverlayExtraWideBack \
 	TransparentNavigationBarOverlay \
+	NotesRoleEnabledOverlay \
 	preinstalled-packages-platform-overlays.xml
 
 include $(BUILD_PHONY_PACKAGE)
diff --git a/core/tests/expresslog/Android.bp b/packages/overlays/NotesRoleEnabledOverlay/Android.bp
similarity index 64%
rename from core/tests/expresslog/Android.bp
rename to packages/overlays/NotesRoleEnabledOverlay/Android.bp
index cab49a7..68ebd96 100644
--- a/core/tests/expresslog/Android.bp
+++ b/packages/overlays/NotesRoleEnabledOverlay/Android.bp
@@ -1,16 +1,18 @@
-// Copyright (C) 2023 The Android Open Source Project
+//
+//  Copyright 2023, The Android Open Source Project
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
-//      http://www.apache.org/licenses/LICENSE-2.0
+//     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 {
     // See: http://go/android-license-faq
@@ -21,27 +23,8 @@
     default_applicable_licenses: ["frameworks_base_license"],
 }
 
-android_test {
-    name: "ExpressLogTests",
-
-    srcs: [
-        "src/**/*.java",
-    ],
-
-    static_libs: [
-        "androidx.test.rules",
-        "modules-utils-build",
-    ],
-
-    libs: [
-        "android.test.base",
-        "android.test.runner",
-    ],
-
-    platform_apis: true,
-    test_suites: [
-        "general-tests",
-    ],
-
-    certificate: "platform",
+runtime_resource_overlay {
+    name: "NotesRoleEnabledOverlay",
+    theme: "NotesRoleEnabled",
+    product_specific: true,
 }
diff --git a/packages/overlays/NotesRoleEnabledOverlay/AndroidManifest.xml b/packages/overlays/NotesRoleEnabledOverlay/AndroidManifest.xml
new file mode 100644
index 0000000..c01178d
--- /dev/null
+++ b/packages/overlays/NotesRoleEnabledOverlay/AndroidManifest.xml
@@ -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.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.role.notes.enabled"
+        android:versionCode="1"
+        android:versionName="1.0">
+    <overlay android:targetPackage="android"
+        android:priority="1"/>
+
+    <application android:label="@string/notes_role_enabled_overlay_title" android:hasCode="false"/>
+</manifest>
\ No newline at end of file
diff --git a/packages/overlays/NotesRoleEnabledOverlay/res/values/config.xml b/packages/overlays/NotesRoleEnabledOverlay/res/values/config.xml
new file mode 100644
index 0000000..f27f5f4
--- /dev/null
+++ b/packages/overlays/NotesRoleEnabledOverlay/res/values/config.xml
@@ -0,0 +1,28 @@
+<?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.
+ */
+-->
+<resources>
+    <!-- Whether the default notes role should be enabled. In builds without 
+    device-specific overlays, this can be controlled in developer options. -->
+     <bool name="config_enableDefaultNotes">true</bool>
+
+    <!-- Whether the default notes role for work profile should be enabled. 
+    In builds without device-specific overlays, this can be controlled in 
+    developer options. -->
+    <bool name="config_enableDefaultNotesForWorkProfile">true</bool>
+</resources>
diff --git a/packages/overlays/NotesRoleEnabledOverlay/res/values/strings.xml b/packages/overlays/NotesRoleEnabledOverlay/res/values/strings.xml
new file mode 100644
index 0000000..3edbb57
--- /dev/null
+++ b/packages/overlays/NotesRoleEnabledOverlay/res/values/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2019, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Name of overlay [CHAR LIMIT=64] -->
+    <string name="notes_role_enabled_overlay_title" translatable="false">Notes Role enabled</string>
+</resources>
\ No newline at end of file
diff --git a/proto/src/system_messages.proto b/proto/src/system_messages.proto
index 4702734..21d0979 100644
--- a/proto/src/system_messages.proto
+++ b/proto/src/system_messages.proto
@@ -402,5 +402,7 @@
     // Package: android
     NOTE_ALL_MANAGED_SUBSCRIPTIONS_AND_MANAGED_PROFILE_OFF = 1006;
 
+    // Notify the user that audio was lowered based on Calculated Sound Dose (CSD)
+    NOTE_CSD_LOWER_AUDIO = 1007;
   }
 }
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 51325e7..a3b4a0f 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -112,6 +112,7 @@
 import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseArray;
+import android.util.SparseBooleanArray;
 import android.view.Display;
 import android.view.IWindow;
 import android.view.InputDevice;
@@ -160,6 +161,7 @@
 import com.android.server.inputmethod.InputMethodManagerInternal;
 import com.android.server.pm.UserManagerInternal;
 import com.android.server.policy.WindowManagerPolicy;
+import com.android.server.utils.Slogf;
 import com.android.server.wm.ActivityTaskManagerInternal;
 import com.android.server.wm.WindowManagerInternal;
 import com.android.settingslib.RestrictedLockUtils;
@@ -192,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;
 
@@ -301,7 +304,23 @@
     private final List<SendWindowStateChangedEventRunnable> mSendWindowStateChangedEventRunnables =
             new ArrayList<>();
 
-    private int mCurrentUserId = UserHandle.USER_SYSTEM;
+    @GuardedBy("mLock")
+    private @UserIdInt int mCurrentUserId = UserHandle.USER_SYSTEM;
+
+    // TODO(b/255426725): temporary workaround to support visible background users for UiAutomation:
+    // when the UiAutomation is set in a visible background user, mCurrentUserId points to that user
+    // and mRealCurrentUserId points to the "real" current user; otherwise, mRealCurrentUserId
+    // is set as UserHandle.USER_CURRENT.
+    @GuardedBy("mLock")
+    private @UserIdInt int mRealCurrentUserId = UserHandle.USER_CURRENT;
+
+    // TODO(b/255426725): temporary workaround to support visible background users for UiAutomation
+    // purposes - in the long term, the whole service should be refactored so it handles "visible"
+    // users, not current user. Notice that because this is temporary, it's not trying to optimize
+    // performance / utilization (for example, it's not using an IntArray)
+    @GuardedBy("mLock")
+    @Nullable // only set when device supports visible background users
+    private final SparseBooleanArray mVisibleBgUserIds;
 
     //TODO: Remove this hack
     private boolean mInitialized;
@@ -316,6 +335,7 @@
     private SparseArray<SurfaceControl> mA11yOverlayLayers = new SparseArray<>();
 
     private final FlashNotificationsController mFlashNotificationsController;
+    private final UserManagerInternal mUmi;
 
     private AccessibilityUserState getCurrentUserStateLocked() {
         return getUserStateLocked(mCurrentUserId);
@@ -445,6 +465,10 @@
             mHasInputFilter = true;
         }
         mFlashNotificationsController = new FlashNotificationsController(mContext);
+        mUmi = LocalServices.getService(UserManagerInternal.class);
+        // TODO(b/255426725): not used on tests
+        mVisibleBgUserIds = null;
+
         init();
     }
 
@@ -477,6 +501,15 @@
         mProxyManager = new ProxyManager(mLock, mA11yWindowManager, mContext, mMainHandler,
                 mUiAutomationManager, this);
         mFlashNotificationsController = new FlashNotificationsController(mContext);
+        mUmi = LocalServices.getService(UserManagerInternal.class);
+
+        if (UserManager.isVisibleBackgroundUsersEnabled()) {
+            mVisibleBgUserIds = new SparseBooleanArray();
+            mUmi.addUserVisibilityListener((u, v) -> onUserVisibilityChanged(u, v));
+        } else {
+            mVisibleBgUserIds = null;
+        }
+
         init();
     }
 
@@ -493,6 +526,12 @@
         return mCurrentUserId;
     }
 
+    @GuardedBy("mLock")
+    @Override
+    public SparseBooleanArray getVisibleUserIdsLocked() {
+        return mVisibleBgUserIds;
+    }
+
     @Override
     public boolean isAccessibilityButtonShown() {
         return mIsAccessibilityButtonShown;
@@ -1181,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;
     }
@@ -1362,6 +1401,7 @@
     public void registerUiTestAutomationService(IBinder owner,
             IAccessibilityServiceClient serviceClient,
             AccessibilityServiceInfo accessibilityServiceInfo,
+            int userId,
             int flags) {
         if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) {
             mTraceManager.logTrace(LOG_TAG + ".registerUiTestAutomationService",
@@ -1374,6 +1414,7 @@
                 FUNCTION_REGISTER_UI_TEST_AUTOMATION_SERVICE);
 
         synchronized (mLock) {
+            changeCurrentUserForTestAutomationIfNeededLocked(userId);
             mUiAutomationManager.registerUiTestAutomationServiceLocked(owner, serviceClient,
                     mContext, accessibilityServiceInfo, sIdCounter++, mMainHandler,
                     mSecurityPolicy, this, getTraceManager(), mWindowManagerService,
@@ -1390,9 +1431,57 @@
         }
         synchronized (mLock) {
             mUiAutomationManager.unregisterUiTestAutomationServiceLocked(serviceClient);
+            restoreCurrentUserAfterTestAutomationIfNeededLocked();
         }
     }
 
+    // TODO(b/255426725): temporary workaround to support visible background users for UiAutomation
+    @GuardedBy("mLock")
+    private void changeCurrentUserForTestAutomationIfNeededLocked(@UserIdInt int userId) {
+        if (mVisibleBgUserIds == null) {
+            Slogf.d(LOG_TAG, "changeCurrentUserForTestAutomationIfNeededLocked(%d): ignoring "
+                    + "because device doesn't support visible background users", userId);
+            return;
+        }
+        if (!mVisibleBgUserIds.get(userId)) {
+            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.d(LOG_TAG, "changeCurrentUserForTestAutomationIfNeededLocked(): NOT changing "
+                    + "current user for test automation purposes as it is already %d",
+                    mCurrentUserId);
+            return;
+        }
+        Slogf.i(LOG_TAG, "changeCurrentUserForTestAutomationIfNeededLocked(): changing current user"
+                + " from %d to %d for test automation purposes", mCurrentUserId, userId);
+        mRealCurrentUserId = mCurrentUserId;
+        switchUser(userId);
+    }
+
+    // TODO(b/255426725): temporary workaround to support visible background users for UiAutomation
+    @GuardedBy("mLock")
+    private void restoreCurrentUserAfterTestAutomationIfNeededLocked() {
+        if (mVisibleBgUserIds == null) {
+            Slogf.d(LOG_TAG, "restoreCurrentUserForTestAutomationIfNeededLocked(): ignoring "
+                    + "because device doesn't support visible background users");
+            return;
+        }
+        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;
+        switchUser(currentUserId);
+    }
+
     @Override
     public IBinder getWindowToken(int windowId, int userId) {
         if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) {
@@ -1531,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--) {
@@ -2291,8 +2392,7 @@
     private void updateServicesLocked(AccessibilityUserState userState) {
         Map<ComponentName, AccessibilityServiceConnection> componentNameToServiceMap =
                 userState.mComponentNameToServiceMap;
-        boolean isUnlockingOrUnlocked = LocalServices.getService(UserManagerInternal.class)
-                    .isUserUnlockingOrUnlocked(userState.mUserId);
+        boolean isUnlockingOrUnlocked = mUmi.isUserUnlockingOrUnlocked(userState.mUserId);
 
         for (int i = 0, count = userState.mInstalledServices.size(); i < count; i++) {
             AccessibilityServiceInfo installedService = userState.mInstalledServices.get(i);
@@ -2593,6 +2693,19 @@
         }
     }
 
+    private void onUserVisibilityChanged(@UserIdInt int userId, boolean visible) {
+        if (DEBUG) {
+            Slogf.d(LOG_TAG, "onUserVisibilityChanged(): %d => %b", userId, visible);
+        }
+        synchronized (mLock) {
+            if (visible) {
+                mVisibleBgUserIds.put(userId, visible);
+            } else {
+                mVisibleBgUserIds.delete(userId);
+            }
+        }
+    }
+
     /**
      * Called when any property of the user state has changed.
      *
@@ -4025,7 +4138,16 @@
             pw.println("ACCESSIBILITY MANAGER (dumpsys accessibility)");
             pw.println();
             pw.append("currentUserId=").append(String.valueOf(mCurrentUserId));
+            if (mRealCurrentUserId != UserHandle.USER_CURRENT
+                    && mCurrentUserId != mRealCurrentUserId) {
+                pw.append(" (set for UiAutomation purposes; \"real\" current user is ")
+                        .append(String.valueOf(mRealCurrentUserId)).append(")");
+            }
             pw.println();
+            if (mVisibleBgUserIds != null) {
+                pw.append("visibleBgUserIds=").append(mVisibleBgUserIds.toString());
+                pw.println();
+            }
             pw.append("hasWindowMagnificationConnection=").append(
                     String.valueOf(getWindowMagnificationMgr().isConnected()));
             pw.println();
@@ -4052,6 +4174,7 @@
             }
             pw.println();
             mProxyManager.dump(fd, pw, args);
+            mA11yDisplayListener.dump(fd, pw, args);
         }
     }
 
@@ -4437,6 +4560,20 @@
             /* do nothing */
         }
 
+        void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+            pw.println("Accessibility Display Listener:");
+            pw.println("    SystemUI uid: " + mSystemUiUid);
+            int size = mDisplaysList.size();
+            pw.printf("    %d valid display%s: ", size, (size == 1 ? "" : "s"));
+            for (int i = 0; i < size; i++) {
+                pw.print(mDisplaysList.get(i).getDisplayId());
+                if (i < size - 1) {
+                    pw.print(", ");
+                }
+            }
+            pw.println();
+        }
+
         private boolean isValidDisplay(@Nullable Display display) {
             if (display == null || display.getType() == Display.TYPE_OVERLAY) {
                 return false;
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java
index c37ea50..8865623 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java
@@ -39,6 +39,7 @@
 import android.os.UserManager;
 import android.util.ArraySet;
 import android.util.Slog;
+import android.util.SparseBooleanArray;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.inputmethod.InputMethodInfo;
 
@@ -88,6 +89,12 @@
          */
         int getCurrentUserIdLocked();
         // TODO: Should include resolveProfileParentLocked, but that was already in SecurityPolicy
+
+        // TODO(b/255426725): temporary hack; see comment on A11YMS.mVisibleBgUserIds
+        /**
+         * Returns the {@link android.os.UserManager#getVisibleUsers() visible users}.
+         */
+        @Nullable SparseBooleanArray getVisibleUserIdsLocked();
     }
 
     private final Context mContext;
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
index baed181..78f07e4 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
@@ -51,6 +51,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.accessibility.AccessibilitySecurityPolicy.AccessibilityUserManager;
+import com.android.server.utils.Slogf;
 import com.android.server.wm.WindowManagerInternal;
 
 import java.io.FileDescriptor;
@@ -59,6 +60,7 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * This class provides APIs for accessibility manager to manage {@link AccessibilityWindowInfo}s and
@@ -67,6 +69,7 @@
 public class AccessibilityWindowManager {
     private static final String LOG_TAG = "AccessibilityWindowManager";
     private static final boolean DEBUG = false;
+    private static final boolean VERBOSE = false;
 
     private static int sNextWindowId;
 
@@ -100,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;
 
@@ -209,6 +215,9 @@
          * Constructor for DisplayWindowsObserver.
          */
         DisplayWindowsObserver(int displayId) {
+            if (DEBUG) {
+                Slogf.d(LOG_TAG, "Creating DisplayWindowsObserver for displayId %d", displayId);
+            }
             mDisplayId = displayId;
         }
 
@@ -430,12 +439,30 @@
             synchronized (mLock) {
                 updateWindowsByWindowAttributesLocked(windows);
                 if (DEBUG) {
-                    Slog.i(LOG_TAG, "Display Id = " + mDisplayId);
-                    Slog.i(LOG_TAG, "Windows changed: " + windows);
+                    Slogf.i(LOG_TAG, "mDisplayId=%d, topFocusedDisplayId=%d, currentUserId=%d, "
+                            + "visibleBgUsers=%s", mDisplayId, topFocusedDisplayId,
+                            mAccessibilityUserManager.getCurrentUserIdLocked(),
+                            mAccessibilityUserManager.getVisibleUserIdsLocked());
+                    if (VERBOSE) {
+                        Slogf.i(LOG_TAG, "%d windows changed: %s ", windows.size(), windows);
+                    } else {
+                        List<String> windowsInfo = windows.stream()
+                                .map(w -> "{displayId=" + w.displayId + ", title=" + w.title + "}")
+                                .collect(Collectors.toList());
+                        Slogf.i(LOG_TAG, "%d windows changed: %s", windows.size(), windowsInfo);
+                    }
                 }
                 if (shouldUpdateWindowsLocked(forceSend, windows)) {
                     mTopFocusedDisplayId = topFocusedDisplayId;
+                    if (!isProxyed(topFocusedDisplayId)) {
+                        mLastNonProxyTopFocusedDisplayId = topFocusedDisplayId;
+                    }
                     mTopFocusedWindowToken = topFocusedWindowToken;
+                    if (DEBUG) {
+                        Slogf.d(LOG_TAG, "onWindowsForAccessibilityChanged(): updating windows for "
+                                + "display %d and token %s",
+                                topFocusedDisplayId, topFocusedWindowToken);
+                    }
                     cacheWindows(windows);
                     // Lets the policy update the focused and active windows.
                     updateWindowsLocked(mAccessibilityUserManager.getCurrentUserIdLocked(),
@@ -443,6 +470,11 @@
                     // Someone may be waiting for the windows - advertise it.
                     mLock.notifyAll();
                 }
+                else if (DEBUG) {
+                    Slogf.d(LOG_TAG, "onWindowsForAccessibilityChanged(): NOT updating windows for "
+                            + "display %d and token %s",
+                            topFocusedDisplayId, topFocusedWindowToken);
+                }
             }
         }
 
@@ -472,6 +504,12 @@
             }
 
             final int windowCount = windows.size();
+            if (VERBOSE) {
+                Slogf.v(LOG_TAG,
+                        "shouldUpdateWindowsLocked(): mDisplayId=%d, windowCount=%d, "
+                        + "mCachedWindowInfos.size()=%d, windows.size()=%d", mDisplayId,
+                        windowCount, mCachedWindowInfos.size(), windows.size());
+            }
             // We computed the windows and if they changed notify the client.
             if (mCachedWindowInfos.size() != windowCount) {
                 // Different size means something changed.
@@ -1109,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.
      *
@@ -1274,7 +1327,7 @@
      */
     @Nullable
     public RemoteAccessibilityConnection getConnectionLocked(int userId, int windowId) {
-        if (DEBUG) {
+        if (VERBOSE) {
             Slog.i(LOG_TAG, "Trying to get interaction connection to windowId: " + windowId);
         }
         RemoteAccessibilityConnection connection = mGlobalInteractionConnections.get(windowId);
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/AlwaysOnMagnificationFeatureFlag.java b/services/accessibility/java/com/android/server/accessibility/magnification/AlwaysOnMagnificationFeatureFlag.java
index 16d2e6b..93531dd 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/AlwaysOnMagnificationFeatureFlag.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/AlwaysOnMagnificationFeatureFlag.java
@@ -16,76 +16,31 @@
 
 package com.android.server.accessibility.magnification;
 
-import android.annotation.NonNull;
 import android.provider.DeviceConfig;
 
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.util.concurrent.Executor;
-
 /**
  * Encapsulates the feature flags for always on magnification. {@see DeviceConfig}
  *
  * @hide
  */
-public class AlwaysOnMagnificationFeatureFlag {
+public class AlwaysOnMagnificationFeatureFlag extends MagnificationFeatureFlagBase {
 
     private static final String NAMESPACE = DeviceConfig.NAMESPACE_WINDOW_MANAGER;
     private static final String FEATURE_NAME_ENABLE_ALWAYS_ON_MAGNIFICATION =
             "AlwaysOnMagnifier__enable_always_on_magnifier";
 
-    private AlwaysOnMagnificationFeatureFlag() {}
-
-    /** Returns true if the feature flag is enabled for always on magnification */
-    public static boolean isAlwaysOnMagnificationEnabled() {
-        return DeviceConfig.getBoolean(
-                NAMESPACE,
-                FEATURE_NAME_ENABLE_ALWAYS_ON_MAGNIFICATION,
-                /* defaultValue= */ false);
+    @Override
+    String getNamespace() {
+        return NAMESPACE;
     }
 
-    /** Sets the feature flag. Only used for testing; requires shell permissions. */
-    @VisibleForTesting
-    public static boolean setAlwaysOnMagnificationEnabled(boolean isEnabled) {
-        return DeviceConfig.setProperty(
-                NAMESPACE,
-                FEATURE_NAME_ENABLE_ALWAYS_ON_MAGNIFICATION,
-                Boolean.toString(isEnabled),
-                /* makeDefault= */ false);
+    @Override
+    String getFeatureName() {
+        return FEATURE_NAME_ENABLE_ALWAYS_ON_MAGNIFICATION;
     }
 
-    /**
-     * Adds a listener for when the feature flag changes.
-     *
-     * <p>{@see DeviceConfig#addOnPropertiesChangedListener(
-     * String, Executor, DeviceConfig.OnPropertiesChangedListener)}
-     */
-    @NonNull
-    public static DeviceConfig.OnPropertiesChangedListener addOnChangedListener(
-            @NonNull Executor executor, @NonNull Runnable listener) {
-        DeviceConfig.OnPropertiesChangedListener onChangedListener =
-                properties -> {
-                    if (properties.getKeyset().contains(
-                            FEATURE_NAME_ENABLE_ALWAYS_ON_MAGNIFICATION)) {
-                        listener.run();
-                    }
-                };
-        DeviceConfig.addOnPropertiesChangedListener(
-                NAMESPACE,
-                executor,
-                onChangedListener);
-
-        return onChangedListener;
-    }
-
-    /**
-     * Remove a listener for when the feature flag changes.
-     *
-     * <p>{@see DeviceConfig#addOnPropertiesChangedListener(String, Executor,
-     * DeviceConfig.OnPropertiesChangedListener)}
-     */
-    public static void removeOnChangedListener(
-            @NonNull DeviceConfig.OnPropertiesChangedListener onChangedListener) {
-        DeviceConfig.removeOnPropertiesChangedListener(onChangedListener);
+    @Override
+    boolean getDefaultValue() {
+        return false;
     }
 }
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java
index ed8a35f..fbc7b3c 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java
@@ -38,7 +38,6 @@
 import android.hardware.display.DisplayManagerInternal;
 import android.os.Handler;
 import android.os.Message;
-import android.provider.DeviceConfig;
 import android.text.TextUtils;
 import android.util.DisplayMetrics;
 import android.util.MathUtils;
@@ -57,6 +56,7 @@
 import com.android.internal.accessibility.common.MagnificationConstants;
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ConcurrentUtils;
 import com.android.internal.util.function.pooled.PooledLambda;
 import com.android.server.LocalServices;
 import com.android.server.accessibility.AccessibilityManagerService;
@@ -110,6 +110,7 @@
     private boolean mAlwaysOnMagnificationEnabled = false;
     private final DisplayManagerInternal mDisplayManagerInternal;
 
+    private final MagnificationThumbnailFeatureFlag mMagnificationThumbnailFeatureFlag;
     @NonNull private final Supplier<MagnificationThumbnail> mThumbnailSupplier;
 
     /**
@@ -177,9 +178,7 @@
                     mDisplayId, mMagnificationRegion);
             mMagnificationRegion.getBounds(mMagnificationBounds);
 
-            if (mMagnificationThumbnail == null) {
-                mMagnificationThumbnail = mThumbnailSupplier.get();
-            }
+            createThumbnailIfSupported();
 
             return true;
         }
@@ -207,7 +206,7 @@
                 mRegistered = false;
                 unregisterCallbackLocked(mDisplayId, delete);
 
-                destroyThumbNail();
+                destroyThumbnail();
             }
             mUnregisterPending = false;
         }
@@ -345,7 +344,7 @@
                     mMagnificationRegion.set(magnified);
                     mMagnificationRegion.getBounds(mMagnificationBounds);
 
-                    refreshThumbNail(getScale(), getCenterX(), getCenterY());
+                    refreshThumbnail(getScale(), getCenterX(), getCenterY());
 
                     // It's possible that our magnification spec is invalid with the new bounds.
                     // Adjust the current spec's offsets if necessary.
@@ -405,9 +404,9 @@
             }
 
             if (isActivated()) {
-                updateThumbNail(scale, centerX, centerY);
+                updateThumbnail(scale, centerX, centerY);
             } else {
-                hideThumbNail();
+                hideThumbnail();
             }
         }
 
@@ -538,7 +537,7 @@
             mIdOfLastServiceToMagnify = INVALID_SERVICE_ID;
             sendSpecToAnimation(spec, animationCallback);
 
-            hideThumbNail();
+            hideThumbnail();
 
             return changed;
         }
@@ -596,16 +595,16 @@
         }
 
         @GuardedBy("mLock")
-        void updateThumbNail(float scale, float centerX, float centerY) {
+        void updateThumbnail(float scale, float centerX, float centerY) {
             if (mMagnificationThumbnail != null) {
-                mMagnificationThumbnail.updateThumbNail(scale, centerX, centerY);
+                mMagnificationThumbnail.updateThumbnail(scale, centerX, centerY);
             }
         }
 
         @GuardedBy("mLock")
-        void refreshThumbNail(float scale, float centerX, float centerY) {
+        void refreshThumbnail(float scale, float centerX, float centerY) {
             if (mMagnificationThumbnail != null) {
-                mMagnificationThumbnail.setThumbNailBounds(
+                mMagnificationThumbnail.setThumbnailBounds(
                         mMagnificationBounds,
                         scale,
                         centerX,
@@ -615,20 +614,38 @@
         }
 
         @GuardedBy("mLock")
-        void hideThumbNail() {
+        void hideThumbnail() {
             if (mMagnificationThumbnail != null) {
-                mMagnificationThumbnail.hideThumbNail();
+                mMagnificationThumbnail.hideThumbnail();
             }
         }
 
         @GuardedBy("mLock")
-        void destroyThumbNail() {
+        void createThumbnailIfSupported() {
+            if (mMagnificationThumbnail == null) {
+                mMagnificationThumbnail = mThumbnailSupplier.get();
+                // We call refreshThumbnail when the thumbnail is just created to set current
+                // magnification bounds to thumbnail. It to prevent the thumbnail size has not yet
+                // updated properly and thus shows with huge size. (b/276314641)
+                refreshThumbnail(getScale(), getCenterX(), getCenterY());
+            }
+        }
+
+        @GuardedBy("mLock")
+        void destroyThumbnail() {
             if (mMagnificationThumbnail != null) {
-                hideThumbNail();
+                hideThumbnail();
                 mMagnificationThumbnail = null;
             }
         }
 
+        void onThumbnailFeatureFlagChanged() {
+            synchronized (mLock) {
+                destroyThumbnail();
+                createThumbnailIfSupported();
+            }
+        }
+
         /**
          * Updates the current magnification spec.
          *
@@ -768,20 +785,7 @@
                 lock,
                 magnificationInfoChangedCallback,
                 scaleProvider,
-                () -> {
-                    if (DeviceConfig.getBoolean(
-                            DeviceConfig.NAMESPACE_ACCESSIBILITY,
-                            "enable_magnifier_thumbnail",
-                            /* defaultValue= */ false)) {
-                        return new MagnificationThumbnail(
-                            context,
-                            context.getSystemService(WindowManager.class),
-                            new Handler(context.getMainLooper())
-                        );
-                    }
-
-                    return null;
-                });
+                /* thumbnailSupplier= */ null);
     }
 
     /** Constructor for tests */
@@ -791,7 +795,7 @@
             @NonNull Object lock,
             @NonNull MagnificationInfoChangedCallback magnificationInfoChangedCallback,
             @NonNull MagnificationScaleProvider scaleProvider,
-            @NonNull Supplier<MagnificationThumbnail> thumbnailSupplier) {
+            Supplier<MagnificationThumbnail> thumbnailSupplier) {
         mControllerCtx = ctx;
         mLock = lock;
         mMainThreadId = mControllerCtx.getContext().getMainLooper().getThread().getId();
@@ -799,7 +803,41 @@
         addInfoChangedCallback(magnificationInfoChangedCallback);
         mScaleProvider = scaleProvider;
         mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
-        mThumbnailSupplier = thumbnailSupplier;
+        mMagnificationThumbnailFeatureFlag = new MagnificationThumbnailFeatureFlag();
+        mMagnificationThumbnailFeatureFlag.addOnChangedListener(
+                ConcurrentUtils.DIRECT_EXECUTOR, this::onMagnificationThumbnailFeatureFlagChanged);
+        if (thumbnailSupplier != null) {
+            mThumbnailSupplier = thumbnailSupplier;
+        } else {
+            mThumbnailSupplier = () -> {
+                if (mMagnificationThumbnailFeatureFlag.isFeatureFlagEnabled()) {
+                    return new MagnificationThumbnail(
+                            ctx.getContext(),
+                            ctx.getContext().getSystemService(WindowManager.class),
+                            new Handler(ctx.getContext().getMainLooper())
+                    );
+                }
+                return null;
+            };
+        }
+    }
+
+    private void onMagnificationThumbnailFeatureFlagChanged() {
+        synchronized (mLock) {
+            for (int i = 0; i < mDisplays.size(); i++) {
+                onMagnificationThumbnailFeatureFlagChanged(mDisplays.keyAt(i));
+            }
+        }
+    }
+
+    private void onMagnificationThumbnailFeatureFlagChanged(int displayId) {
+        synchronized (mLock) {
+            final DisplayMagnification display = mDisplays.get(displayId);
+            if (display == null) {
+                return;
+            }
+            display.onThumbnailFeatureFlagChanged();
+        }
     }
 
     /**
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..7ee72df 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
@@ -93,6 +93,7 @@
     private final SparseArray<DisableMagnificationCallback>
             mMagnificationEndRunnableSparseArray = new SparseArray();
 
+    private final AlwaysOnMagnificationFeatureFlag mAlwaysOnMagnificationFeatureFlag;
     private final MagnificationScaleProvider mScaleProvider;
     private FullScreenMagnificationController mFullScreenMagnificationController;
     private WindowMagnificationManager mWindowMagnificationMgr;
@@ -151,7 +152,8 @@
         mSupportWindowMagnification = context.getPackageManager().hasSystemFeature(
                 FEATURE_WINDOW_MAGNIFICATION);
 
-        AlwaysOnMagnificationFeatureFlag.addOnChangedListener(
+        mAlwaysOnMagnificationFeatureFlag = new AlwaysOnMagnificationFeatureFlag();
+        mAlwaysOnMagnificationFeatureFlag.addOnChangedListener(
                 ConcurrentUtils.DIRECT_EXECUTOR, mAms::updateAlwaysOnMagnification);
     }
 
@@ -231,6 +233,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 +330,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 +350,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 +359,9 @@
                     }
                 }
             } finally {
+                if (!animate) {
+                    mAms.changeMagnificationMode(displayId, targetMode);
+                }
                 // Reset transition state after enabling target mode.
                 setTransitionState(displayId, null);
             }
@@ -698,7 +712,7 @@
     }
 
     public boolean isAlwaysOnMagnificationFeatureFlagEnabled() {
-        return AlwaysOnMagnificationFeatureFlag.isAlwaysOnMagnificationEnabled();
+        return mAlwaysOnMagnificationFeatureFlag.isFeatureFlagEnabled();
     }
 
     private DisableMagnificationCallback getDisableMagnificationEndRunnableLocked(
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationFeatureFlagBase.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationFeatureFlagBase.java
new file mode 100644
index 0000000..2965887
--- /dev/null
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationFeatureFlagBase.java
@@ -0,0 +1,115 @@
+/*
+ * 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.accessibility.magnification;
+
+import android.annotation.NonNull;
+import android.os.Binder;
+import android.provider.DeviceConfig;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Abstract base class to encapsulates the feature flags for magnification features.
+ * {@see DeviceConfig}
+ *
+ * @hide
+ */
+abstract class MagnificationFeatureFlagBase {
+
+    abstract String getNamespace();
+    abstract String getFeatureName();
+    abstract boolean getDefaultValue();
+
+    private void clearCallingIdentifyAndTryCatch(Runnable tryBlock, Runnable catchBlock) {
+        try {
+            Binder.withCleanCallingIdentity(() -> tryBlock.run());
+        } catch (Throwable throwable) {
+            catchBlock.run();
+        }
+    }
+
+    /** Returns true iff the feature flag is readable and enabled */
+    public boolean isFeatureFlagEnabled() {
+        AtomicBoolean isEnabled = new AtomicBoolean(getDefaultValue());
+
+        clearCallingIdentifyAndTryCatch(
+                () -> isEnabled.set(DeviceConfig.getBoolean(
+                        getNamespace(),
+                        getFeatureName(),
+                        getDefaultValue())),
+                () -> isEnabled.set(getDefaultValue()));
+
+        return isEnabled.get();
+    }
+
+    /** Sets the feature flag. Only used for testing; requires shell permissions. */
+    @VisibleForTesting
+    public boolean setFeatureFlagEnabled(boolean isEnabled) {
+        AtomicBoolean success = new AtomicBoolean(getDefaultValue());
+
+        clearCallingIdentifyAndTryCatch(
+                () -> success.set(DeviceConfig.setProperty(
+                        getNamespace(),
+                        getFeatureName(),
+                        Boolean.toString(isEnabled),
+                        /* makeDefault= */ false)),
+                () -> success.set(getDefaultValue()));
+
+        return success.get();
+    }
+
+    /**
+     * Adds a listener for when the feature flag changes.
+     *
+     * <p>{@see DeviceConfig#addOnPropertiesChangedListener(
+     * String, Executor, DeviceConfig.OnPropertiesChangedListener)}
+     */
+    @NonNull
+    public DeviceConfig.OnPropertiesChangedListener addOnChangedListener(
+            @NonNull Executor executor, @NonNull Runnable listener) {
+        DeviceConfig.OnPropertiesChangedListener onChangedListener =
+                properties -> {
+                    if (properties.getKeyset().contains(
+                            getFeatureName())) {
+                        listener.run();
+                    }
+                };
+
+        clearCallingIdentifyAndTryCatch(
+                () -> DeviceConfig.addOnPropertiesChangedListener(
+                        getNamespace(),
+                        executor,
+                        onChangedListener),
+                () -> {});
+
+        return onChangedListener;
+    }
+
+    /**
+     * Remove a listener for when the feature flag changes.
+     *
+     * <p>{@see DeviceConfig#addOnPropertiesChangedListener(String, Executor,
+     * DeviceConfig.OnPropertiesChangedListener)}
+     */
+    public void removeOnChangedListener(
+            @NonNull DeviceConfig.OnPropertiesChangedListener onChangedListener) {
+        DeviceConfig.removeOnPropertiesChangedListener(onChangedListener);
+    }
+}
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationThumbnail.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationThumbnail.java
index 5a783f4..03fa93d 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationThumbnail.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationThumbnail.java
@@ -58,7 +58,9 @@
     @VisibleForTesting
     public final FrameLayout mThumbnailLayout;
 
-    private final View mThumbNailView;
+    private final View mThumbnailView;
+    private int mThumbnailWidth;
+    private int mThumbnailHeight;
 
     private final WindowManager.LayoutParams mBackgroundParams;
     private boolean mVisible = false;
@@ -66,7 +68,7 @@
     private static final float ASPECT_RATIO = 14f;
     private static final float BG_ASPECT_RATIO = ASPECT_RATIO / 2f;
 
-    private ObjectAnimator mThumbNailAnimator;
+    private ObjectAnimator mThumbnailAnimator;
     private boolean mIsFadingIn;
 
     /**
@@ -79,9 +81,11 @@
         mWindowBounds =  mWindowManager.getCurrentWindowMetrics().getBounds();
         mThumbnailLayout = (FrameLayout) LayoutInflater.from(mContext)
                 .inflate(R.layout.thumbnail_background_view, /* root: */ null);
-        mThumbNailView =
+        mThumbnailView =
                 mThumbnailLayout.findViewById(R.id.accessibility_magnification_thumbnail_view);
         mBackgroundParams = createLayoutParams();
+        mThumbnailWidth = 0;
+        mThumbnailHeight = 0;
     }
 
     /**
@@ -90,35 +94,35 @@
      * @param currentBounds the current magnification bounds
      */
     @AnyThread
-    public void setThumbNailBounds(Rect currentBounds, float scale, float centerX, float centerY) {
+    public void setThumbnailBounds(Rect currentBounds, float scale, float centerX, float centerY) {
         if (DEBUG) {
-            Log.d(LOG_TAG, "setThumbNailBounds " + currentBounds);
+            Log.d(LOG_TAG, "setThumbnailBounds " + currentBounds);
         }
         mHandler.post(() -> {
             mWindowBounds = currentBounds;
             setBackgroundBounds();
             if (mVisible) {
-                updateThumbNailMainThread(scale, centerX, centerY);
+                updateThumbnailMainThread(scale, centerX, centerY);
             }
         });
     }
 
     private void setBackgroundBounds() {
         Point magnificationBoundary = getMagnificationThumbnailPadding(mContext);
-        final int thumbNailWidth = (int) (mWindowBounds.width() / BG_ASPECT_RATIO);
-        final int thumbNailHeight = (int) (mWindowBounds.height() / BG_ASPECT_RATIO);
+        mThumbnailWidth = (int) (mWindowBounds.width() / BG_ASPECT_RATIO);
+        mThumbnailHeight = (int) (mWindowBounds.height() / BG_ASPECT_RATIO);
         int initX = magnificationBoundary.x;
         int initY = magnificationBoundary.y;
-        mBackgroundParams.width = thumbNailWidth;
-        mBackgroundParams.height = thumbNailHeight;
+        mBackgroundParams.width = mThumbnailWidth;
+        mBackgroundParams.height = mThumbnailHeight;
         mBackgroundParams.x = initX;
         mBackgroundParams.y = initY;
     }
 
     @MainThread
-    private void showThumbNail() {
+    private void showThumbnail() {
         if (DEBUG) {
-            Log.d(LOG_TAG, "showThumbNail " + mVisible);
+            Log.d(LOG_TAG, "showThumbnail " + mVisible);
         }
         animateThumbnail(true);
     }
@@ -127,14 +131,14 @@
      * Hides thumbnail and removes the view from the window when finished animating.
      */
     @AnyThread
-    public void hideThumbNail() {
-        mHandler.post(this::hideThumbNailMainThread);
+    public void hideThumbnail() {
+        mHandler.post(this::hideThumbnailMainThread);
     }
 
     @MainThread
-    private void hideThumbNailMainThread() {
+    private void hideThumbnailMainThread() {
         if (DEBUG) {
-            Log.d(LOG_TAG, "hideThumbNail " + mVisible);
+            Log.d(LOG_TAG, "hideThumbnail " + mVisible);
         }
         if (mVisible) {
             animateThumbnail(false);
@@ -155,14 +159,14 @@
                         + " fadeIn: " + fadeIn
                         + " mVisible: " + mVisible
                         + " isFadingIn: " + mIsFadingIn
-                        + " isRunning: " + mThumbNailAnimator
+                        + " isRunning: " + mThumbnailAnimator
             );
         }
 
         // Reset countdown to hide automatically
-        mHandler.removeCallbacks(this::hideThumbNailMainThread);
+        mHandler.removeCallbacks(this::hideThumbnailMainThread);
         if (fadeIn) {
-            mHandler.postDelayed(this::hideThumbNailMainThread, LINGER_DURATION_MS);
+            mHandler.postDelayed(this::hideThumbnailMainThread, LINGER_DURATION_MS);
         }
 
         if (fadeIn == mIsFadingIn) {
@@ -175,18 +179,18 @@
             mVisible = true;
         }
 
-        if (mThumbNailAnimator != null) {
-            mThumbNailAnimator.cancel();
+        if (mThumbnailAnimator != null) {
+            mThumbnailAnimator.cancel();
         }
-        mThumbNailAnimator = ObjectAnimator.ofFloat(
+        mThumbnailAnimator = ObjectAnimator.ofFloat(
                 mThumbnailLayout,
                 "alpha",
                 fadeIn ? 1f : 0f
         );
-        mThumbNailAnimator.setDuration(
+        mThumbnailAnimator.setDuration(
                 fadeIn ? FADE_IN_ANIMATION_DURATION_MS : FADE_OUT_ANIMATION_DURATION_MS
         );
-        mThumbNailAnimator.addListener(new Animator.AnimatorListener() {
+        mThumbnailAnimator.addListener(new Animator.AnimatorListener() {
             private boolean mIsCancelled;
 
             @Override
@@ -231,7 +235,7 @@
             }
         });
 
-        mThumbNailAnimator.start();
+        mThumbnailAnimator.start();
     }
 
     /**
@@ -246,38 +250,48 @@
      *                of the viewport, or {@link Float#NaN} to leave unchanged
      */
     @AnyThread
-    public void updateThumbNail(float scale, float centerX, float centerY) {
-        mHandler.post(() -> updateThumbNailMainThread(scale, centerX, centerY));
+    public void updateThumbnail(float scale, float centerX, float centerY) {
+        mHandler.post(() -> updateThumbnailMainThread(scale, centerX, centerY));
     }
 
     @MainThread
-    private void updateThumbNailMainThread(float scale, float centerX, float centerY) {
+    private void updateThumbnailMainThread(float scale, float centerX, float centerY) {
         // Restart the fadeout countdown (or show if it's hidden)
-        showThumbNail();
+        showThumbnail();
 
-        var scaleDown = Float.isNaN(scale) ? mThumbNailView.getScaleX() : 1f / scale;
+        var scaleDown = Float.isNaN(scale) ? mThumbnailView.getScaleX() : 1f / scale;
         if (!Float.isNaN(scale)) {
-            mThumbNailView.setScaleX(scaleDown);
-            mThumbNailView.setScaleY(scaleDown);
+            mThumbnailView.setScaleX(scaleDown);
+            mThumbnailView.setScaleY(scaleDown);
+        }
+        float thumbnailWidth;
+        float thumbnailHeight;
+        if (mThumbnailView.getWidth() == 0 || mThumbnailView.getHeight() == 0) {
+            // if the thumbnail view size is not updated correctly, we just use the cached values.
+            thumbnailWidth = mThumbnailWidth;
+            thumbnailHeight = mThumbnailHeight;
+        } else {
+            thumbnailWidth = mThumbnailView.getWidth();
+            thumbnailHeight = mThumbnailView.getHeight();
         }
         if (!Float.isNaN(centerX)) {
-            var padding = mThumbNailView.getPaddingTop();
+            var padding = mThumbnailView.getPaddingTop();
             var ratio = 1f / BG_ASPECT_RATIO;
-            var centerXScaled = centerX * ratio - (mThumbNailView.getWidth() / 2f + padding);
-            var centerYScaled = centerY * ratio - (mThumbNailView.getHeight() / 2f + padding);
+            var centerXScaled = centerX * ratio - (thumbnailWidth / 2f + padding);
+            var centerYScaled = centerY * ratio - (thumbnailHeight / 2f + padding);
 
             if (DEBUG) {
                 Log.d(
                         LOG_TAG,
-                        "updateThumbNail centerXScaled : " + centerXScaled
+                        "updateThumbnail centerXScaled : " + centerXScaled
                                 + " centerYScaled : " + centerYScaled
-                                + " getTranslationX : " + mThumbNailView.getTranslationX()
+                                + " getTranslationX : " + mThumbnailView.getTranslationX()
                                 + " ratio : " + ratio
                 );
             }
 
-            mThumbNailView.setTranslationX(centerXScaled);
-            mThumbNailView.setTranslationY(centerYScaled);
+            mThumbnailView.setTranslationX(centerXScaled);
+            mThumbnailView.setTranslationY(centerYScaled);
         }
     }
 
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationThumbnailFeatureFlag.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationThumbnailFeatureFlag.java
new file mode 100644
index 0000000..519f31b
--- /dev/null
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationThumbnailFeatureFlag.java
@@ -0,0 +1,46 @@
+/*
+ * 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.accessibility.magnification;
+
+import android.provider.DeviceConfig;
+
+/**
+ * Encapsulates the feature flags for magnification thumbnail. {@see DeviceConfig}
+ *
+ * @hide
+ */
+public class MagnificationThumbnailFeatureFlag extends MagnificationFeatureFlagBase {
+
+    private static final String NAMESPACE = DeviceConfig.NAMESPACE_ACCESSIBILITY;
+    private static final String FEATURE_NAME_ENABLE_MAGNIFIER_THUMBNAIL =
+            "enable_magnifier_thumbnail";
+
+    @Override
+    String getNamespace() {
+        return NAMESPACE;
+    }
+
+    @Override
+    String getFeatureName() {
+        return FEATURE_NAME_ENABLE_MAGNIFIER_THUMBNAIL;
+    }
+
+    @Override
+    boolean getDefaultValue() {
+        return false;
+    }
+}
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 2a964b8..b2e8ffc 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);
         }
     }
@@ -4237,7 +4277,7 @@
 
         getUiForShowing().showFillUi(filledId, response, filterText,
                 mService.getServicePackageName(), mComponentName,
-                targetLabel, targetIcon, this, id, mCompatMode);
+                targetLabel, targetIcon, this, userId, id, mCompatMode);
 
         synchronized (mLock) {
             mPresentationStatsEventLogger.maybeSetCountShown(
@@ -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/AutoFillUI.java b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
index 8291610..a631818 100644
--- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
+++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
@@ -23,6 +23,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.UserIdInt;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -196,17 +197,19 @@
      * @param serviceLabel label of autofill service
      * @param serviceIcon icon of autofill service
      * @param callback identifier for the caller
+     * @param userId the user associated wit the session
      * @param sessionId id of the autofill session
      * @param compatMode whether the app is being autofilled in compatibility mode.
      */
     public void showFillUi(@NonNull AutofillId focusedId, @NonNull FillResponse response,
             @Nullable String filterText, @Nullable String servicePackageName,
             @NonNull ComponentName componentName, @NonNull CharSequence serviceLabel,
-            @NonNull Drawable serviceIcon, @NonNull AutoFillUiCallback callback, int sessionId,
-            boolean compatMode) {
+            @NonNull Drawable serviceIcon, @NonNull AutoFillUiCallback callback,
+            @UserIdInt int userId, int sessionId, boolean compatMode) {
         if (sDebug) {
             final int size = filterText == null ? 0 : filterText.length();
-            Slog.d(TAG, "showFillUi(): id=" + focusedId + ", filter=" + size + " chars");
+            Slog.d(TAG, "showFillUi(): id=" + focusedId + ", filter=" + size + " chars, userId="
+                    + userId);
         }
         final LogMaker log = Helper
                 .newLogMaker(MetricsEvent.AUTOFILL_FILL_UI, componentName, servicePackageName,
@@ -221,7 +224,7 @@
                 return;
             }
             hideAllUiThread(callback);
-            mFillUi = new FillUi(mContext, response, focusedId,
+            mFillUi = new FillUi(mContext, userId, response, focusedId,
                     filterText, mOverlayControl, serviceLabel, serviceIcon,
                     mUiModeMgr.isNightMode(),
                     new FillUi.Callback() {
diff --git a/services/autofill/java/com/android/server/autofill/ui/FillUi.java b/services/autofill/java/com/android/server/autofill/ui/FillUi.java
index 76f4505..30d2fe4 100644
--- a/services/autofill/java/com/android/server/autofill/ui/FillUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/FillUi.java
@@ -22,12 +22,15 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.UserIdInt;
 import android.content.Context;
 import android.content.IntentSender;
 import android.content.pm.PackageManager;
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
+import android.hardware.display.DisplayManager;
+import android.os.UserManager;
 import android.service.autofill.Dataset;
 import android.service.autofill.Dataset.DatasetFieldFilter;
 import android.service.autofill.FillResponse;
@@ -36,6 +39,7 @@
 import android.util.Slog;
 import android.util.TypedValue;
 import android.view.ContextThemeWrapper;
+import android.view.Display;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -57,9 +61,12 @@
 import android.widget.TextView;
 
 import com.android.internal.R;
+import com.android.server.LocalServices;
 import com.android.server.UiThread;
 import com.android.server.autofill.AutofillManagerService;
 import com.android.server.autofill.Helper;
+import com.android.server.pm.UserManagerInternal;
+import com.android.server.utils.Slogf;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -133,13 +140,29 @@
         return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK);
     }
 
-    FillUi(@NonNull Context context, @NonNull FillResponse response,
+    FillUi(@NonNull Context context, @UserIdInt int userId, @NonNull FillResponse response,
             @NonNull AutofillId focusedViewId, @Nullable String filterText,
             @NonNull OverlayControl overlayControl, @NonNull CharSequence serviceLabel,
             @NonNull Drawable serviceIcon, boolean nightMode, @NonNull Callback callback) {
         if (sVerbose) Slog.v(TAG, "nightMode: " + nightMode);
         mThemeId = nightMode ? THEME_ID_DARK : THEME_ID_LIGHT;
         mCallback = callback;
+
+        if (UserManager.isVisibleBackgroundUsersEnabled()) {
+            UserManagerInternal umi = LocalServices.getService(UserManagerInternal.class);
+            int displayId = umi.getMainDisplayAssignedToUser(userId);
+            if (sDebug) {
+                Slogf.d(TAG, "Creating context for display %d for user %d", displayId, userId);
+            }
+            Display display = context.getSystemService(DisplayManager.class).getDisplay(displayId);
+            if (display != null) {
+                context = context.createDisplayContext(display);
+            } else {
+                Slogf.d(TAG, "Could not get display with id %d (which is associated with user %d; "
+                        + "FillUi operations will probably fail", displayId, userId);
+            }
+        }
+
         mFullScreen = isFullScreen(context);
         mContext = new ContextThemeWrapper(context, mThemeId);
 
@@ -774,6 +797,7 @@
         pw.print(prefix); pw.print("mContentWidth: "); pw.println(mContentWidth);
         pw.print(prefix); pw.print("mContentHeight: "); pw.println(mContentHeight);
         pw.print(prefix); pw.print("mDestroyed: "); pw.println(mDestroyed);
+        pw.print(prefix); pw.print("mContext: "); pw.println(mContext);
         pw.print(prefix); pw.print("theme id: "); pw.print(mThemeId);
         switch (mThemeId) {
             case THEME_ID_DARK:
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/BackupAndRestoreFeatureFlags.java b/services/backup/java/com/android/server/backup/BackupAndRestoreFeatureFlags.java
index 1990fe2..98aebdd 100644
--- a/services/backup/java/com/android/server/backup/BackupAndRestoreFeatureFlags.java
+++ b/services/backup/java/com/android/server/backup/BackupAndRestoreFeatureFlags.java
@@ -77,4 +77,19 @@
                 /* name= */ "full_backup_utils_route_buffer_size_bytes",
                 /* defaultValue= */ 32 * 1024); // 32 KB
     }
+
+    /**
+     * Retrieves the value of the flag
+     * "unified_restore_continue_after_transport_failure_in_kv_restore".
+     * If true, Unified restore task will continue to next package if key-value restore of a
+     * package fails due to Transport-level failure. See b/128499560 for more context.
+     */
+    @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
+    public static boolean getUnifiedRestoreContinueAfterTransportFailureInKvRestore() {
+        return DeviceConfig.getBoolean(
+                NAMESPACE,
+                /* name= */
+                "unified_restore_continue_after_transport_failure_in_kv_restore",
+                /* defaultValue= */ true);
+    }
 }
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 18e28de..77990af 100644
--- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
+++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
@@ -57,6 +57,7 @@
 import com.android.server.EventLogTags;
 import com.android.server.LocalServices;
 import com.android.server.backup.BackupAgentTimeoutParameters;
+import com.android.server.backup.BackupAndRestoreFeatureFlags;
 import com.android.server.backup.BackupRestoreTask;
 import com.android.server.backup.BackupUtils;
 import com.android.server.backup.OperationStorage;
@@ -168,11 +169,13 @@
     private final BackupEligibilityRules mBackupEligibilityRules;
 
     @VisibleForTesting
-    PerformUnifiedRestoreTask(UserBackupManagerService backupManagerService) {
+    PerformUnifiedRestoreTask(
+            UserBackupManagerService backupManagerService,
+            TransportConnection transportConnection) {
         mListener = null;
         mAgentTimeoutParameters = null;
         mOperationStorage = null;
-        mTransportConnection = null;
+        mTransportConnection = transportConnection;
         mTransportManager = null;
         mEphemeralOpToken = 0;
         mUserId = 0;
@@ -674,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);
@@ -731,13 +734,18 @@
                             ParcelFileDescriptor.MODE_TRUNCATE);
 
             if (transport.getRestoreData(stage) != BackupTransport.TRANSPORT_OK) {
-                // Transport-level failure, so we wind everything up and
-                // terminate the restore operation.
+                // Transport-level failure. This failure could be specific to package currently in
+                // restore.
                 Slog.e(TAG, "Error getting restore data for " + packageName);
                 EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE);
                 stage.close();
                 downloadFile.delete();
-                executeNextState(UnifiedRestoreState.FINAL);
+                UnifiedRestoreState nextState =
+                        BackupAndRestoreFeatureFlags
+                                .getUnifiedRestoreContinueAfterTransportFailureInKvRestore()
+                                ? UnifiedRestoreState.RUNNING_QUEUE
+                                : UnifiedRestoreState.FINAL;
+                executeNextState(nextState);
                 return;
             }
 
@@ -1358,6 +1366,7 @@
         executeNextState(UnifiedRestoreState.RUNNING_QUEUE);
     }
 
+    @VisibleForTesting
     void executeNextState(UnifiedRestoreState nextState) {
         if (MORE_DEBUG) {
             Slog.i(TAG, " => executing next step on "
@@ -1369,6 +1378,26 @@
         backupManagerService.getBackupHandler().sendMessage(msg);
     }
 
+    @VisibleForTesting
+    UnifiedRestoreState getCurrentUnifiedRestoreStateForTesting() {
+        return mState;
+    }
+
+    @VisibleForTesting
+    void setCurrentUnifiedRestoreStateForTesting(UnifiedRestoreState state) {
+        mState = state;
+    }
+
+    @VisibleForTesting
+    void setStateDirForTesting(File stateDir) {
+        mStateDir = stateDir;
+    }
+
+    @VisibleForTesting
+    void initiateOneRestoreForTesting(PackageInfo app, long appVersionCode) {
+        initiateOneRestore(app, appVersionCode);
+    }
+
     // restore observer support
     void sendStartRestore(int numPackages) {
         if (mObserver != null) {
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
index 5b320a8..d8fbd08 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
@@ -604,25 +604,21 @@
         }
 
         @Override
-        @GuardedBy("CompanionDeviceManagerService.this.mTransportManager.mTransports")
         public void addOnTransportsChangedListener(IOnTransportsChangedListener listener) {
             mTransportManager.addListener(listener);
         }
 
         @Override
-        @GuardedBy("CompanionDeviceManagerService.this.mTransportManager.mTransports")
         public void removeOnTransportsChangedListener(IOnTransportsChangedListener listener) {
             mTransportManager.removeListener(listener);
         }
 
         @Override
-        @GuardedBy("CompanionDeviceManagerService.this.mTransportManager.mTransports")
         public void sendMessage(int messageType, byte[] data, int[] associationIds) {
             mTransportManager.sendMessage(messageType, data, associationIds);
         }
 
         @Override
-        @GuardedBy("CompanionDeviceManagerService.this.mTransportManager.mTransports")
         public void addOnMessageReceivedListener(int messageType,
                 IOnMessageReceivedListener listener) {
             mTransportManager.addListener(messageType, listener);
@@ -899,12 +895,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..6f99d86
--- /dev/null
+++ b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncConnectionService.java
@@ -0,0 +1,332 @@
+/*
+ * 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.media.AudioManager;
+import android.os.Bundle;
+import android.telecom.Call;
+import android.telecom.Connection;
+import android.telecom.ConnectionService;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.util.Slog;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.UUID;
+
+/** Service for Telecom to bind to when call metadata is synced between devices. */
+public class CallMetadataSyncConnectionService extends ConnectionService {
+
+    private static final String TAG = "CallMetadataSyncConnectionService";
+
+    private AudioManager mAudioManager;
+    private TelecomManager mTelecomManager;
+    private final Map<PhoneAccountHandleIdentifier, PhoneAccountHandle> mPhoneAccountHandles =
+            new HashMap<>();
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+
+        mAudioManager = getSystemService(AudioManager.class);
+        mTelecomManager = getSystemService(TelecomManager.class);
+    }
+
+    /**
+     * Registers a {@link android.telecom.PhoneAccount} for a given call-capable app on the synced
+     * device.
+     */
+    private void registerPhoneAccount(int associationId, String appIdentifier,
+            String humanReadableAppName) {
+        final PhoneAccountHandleIdentifier phoneAccountHandleIdentifier =
+                new PhoneAccountHandleIdentifier(associationId, appIdentifier);
+        final PhoneAccount phoneAccount = createPhoneAccount(phoneAccountHandleIdentifier,
+                humanReadableAppName);
+        mTelecomManager.registerPhoneAccount(phoneAccount);
+        mTelecomManager.enablePhoneAccount(mPhoneAccountHandles.get(phoneAccountHandleIdentifier),
+                true);
+    }
+
+    /**
+     * Unregisters a {@link android.telecom.PhoneAccount} for a given call-capable app on the synced
+     * device.
+     */
+    private void unregisterPhoneAccount(int associationId, String appIdentifier) {
+        mTelecomManager.unregisterPhoneAccount(mPhoneAccountHandles.remove(
+                new PhoneAccountHandleIdentifier(associationId, appIdentifier)));
+    }
+
+    @VisibleForTesting
+    PhoneAccount createPhoneAccount(PhoneAccountHandleIdentifier phoneAccountHandleIdentifier,
+            String humanReadableAppName) {
+        if (mPhoneAccountHandles.containsKey(phoneAccountHandleIdentifier)) {
+            // Already exists!
+            return null;
+        }
+        final PhoneAccountHandle handle = new PhoneAccountHandle(
+                new ComponentName(this, CallMetadataSyncConnectionService.class),
+                UUID.randomUUID().toString());
+        mPhoneAccountHandles.put(phoneAccountHandleIdentifier, handle);
+        return new PhoneAccount.Builder(handle, humanReadableAppName)
+                .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER
+                        | PhoneAccount.CAPABILITY_SELF_MANAGED).build();
+    }
+
+    static final class PhoneAccountHandleIdentifier {
+        private final int mAssociationId;
+        private final String mAppIdentifier;
+
+        PhoneAccountHandleIdentifier(int associationId, String appIdentifier) {
+            mAssociationId = associationId;
+            mAppIdentifier = appIdentifier;
+        }
+
+        public int getAssociationId() {
+            return mAssociationId;
+        }
+
+        public String getAppIdentifier() {
+            return mAppIdentifier;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mAssociationId, mAppIdentifier);
+        }
+
+        @Override
+        public boolean equals(Object other) {
+            if (other instanceof PhoneAccountHandleIdentifier) {
+                return ((PhoneAccountHandleIdentifier) other).getAssociationId() == mAssociationId
+                        && mAppIdentifier != null
+                        && mAppIdentifier.equals(
+                        ((PhoneAccountHandleIdentifier) other).getAppIdentifier());
+            }
+            return false;
+        }
+    }
+
+    private static final class CallMetadataSyncConnectionIdentifier {
+        private final int mAssociationId;
+        private final long mCallId;
+
+        CallMetadataSyncConnectionIdentifier(int associationId, long callId) {
+            mAssociationId = associationId;
+            mCallId = callId;
+        }
+
+        public int getAssociationId() {
+            return mAssociationId;
+        }
+
+        public long getCallId() {
+            return mCallId;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mAssociationId, mCallId);
+        }
+
+        @Override
+        public boolean equals(Object other) {
+            if (other instanceof CallMetadataSyncConnectionIdentifier) {
+                return ((CallMetadataSyncConnectionIdentifier) other).getAssociationId()
+                        == mAssociationId
+                        && (((CallMetadataSyncConnectionIdentifier) other).getCallId() == mCallId);
+            }
+            return false;
+        }
+    }
+
+    private abstract static class CallMetadataSyncConnectionCallback {
+
+        abstract void sendCallAction(int associationId, long callId, int action);
+
+        abstract void sendStateChange(int associationId, long callId, int newState);
+    }
+
+    private static class CallMetadataSyncConnection extends Connection {
+
+        private final TelecomManager mTelecomManager;
+        private final AudioManager mAudioManager;
+        private final int mAssociationId;
+        private final CallMetadataSyncData.Call mCall;
+        private final CallMetadataSyncConnectionCallback mCallback;
+
+        CallMetadataSyncConnection(TelecomManager telecomManager, AudioManager audioManager,
+                int associationId, CallMetadataSyncData.Call call,
+                CallMetadataSyncConnectionCallback callback) {
+            mTelecomManager = telecomManager;
+            mAudioManager = audioManager;
+            mAssociationId = associationId;
+            mCall = call;
+            mCallback = callback;
+        }
+
+        public long getCallId() {
+            return mCall.getId();
+        }
+
+        public void initialize() {
+            final int status = mCall.getStatus();
+            if (status == android.companion.Telecom.Call.RINGING_SILENCED) {
+                mTelecomManager.silenceRinger();
+            }
+            final int state = CrossDeviceCall.convertStatusToState(status);
+            if (state == Call.STATE_RINGING) {
+                setRinging();
+            } else if (state == Call.STATE_ACTIVE) {
+                setActive();
+            } else if (state == Call.STATE_HOLDING) {
+                setOnHold();
+            } else {
+                Slog.e(TAG, "Could not initialize call to unknown state");
+            }
+
+            final Bundle extras = new Bundle();
+            extras.putLong(CrossDeviceCall.EXTRA_CALL_ID, mCall.getId());
+            putExtras(extras);
+
+            int capabilities = getConnectionCapabilities();
+            if (mCall.hasControl(android.companion.Telecom.Call.PUT_ON_HOLD)) {
+                capabilities |= CAPABILITY_HOLD;
+            } else {
+                capabilities &= ~CAPABILITY_HOLD;
+            }
+            if (mCall.hasControl(android.companion.Telecom.Call.MUTE)) {
+                capabilities |= CAPABILITY_MUTE;
+            } else {
+                capabilities &= ~CAPABILITY_MUTE;
+            }
+            mAudioManager.setMicrophoneMute(
+                    mCall.hasControl(android.companion.Telecom.Call.UNMUTE));
+            if (capabilities != getConnectionCapabilities()) {
+                setConnectionCapabilities(capabilities);
+            }
+        }
+
+        public void update(CallMetadataSyncData.Call call) {
+            final int status = call.getStatus();
+            if (status == android.companion.Telecom.Call.RINGING_SILENCED
+                    && mCall.getStatus() != android.companion.Telecom.Call.RINGING_SILENCED) {
+                mTelecomManager.silenceRinger();
+            }
+            mCall.setStatus(status);
+            final int state = CrossDeviceCall.convertStatusToState(status);
+            if (state != getState()) {
+                if (state == Call.STATE_RINGING) {
+                    setRinging();
+                } else if (state == Call.STATE_ACTIVE) {
+                    setActive();
+                } else if (state == Call.STATE_HOLDING) {
+                    setOnHold();
+                } else {
+                    Slog.e(TAG, "Could not update call to unknown state");
+                }
+            }
+
+            int capabilities = getConnectionCapabilities();
+            final boolean hasHoldControl = mCall.hasControl(
+                    android.companion.Telecom.Call.PUT_ON_HOLD)
+                    || mCall.hasControl(android.companion.Telecom.Call.TAKE_OFF_HOLD);
+            if (hasHoldControl != ((getConnectionCapabilities() & CAPABILITY_HOLD)
+                    == CAPABILITY_HOLD)) {
+                if (hasHoldControl) {
+                    capabilities |= CAPABILITY_HOLD;
+                } else {
+                    capabilities &= ~CAPABILITY_HOLD;
+                }
+            }
+            final boolean hasMuteControl = mCall.hasControl(android.companion.Telecom.Call.MUTE);
+            if (hasMuteControl != ((getConnectionCapabilities() & CAPABILITY_MUTE)
+                    == CAPABILITY_MUTE)) {
+                if (hasMuteControl) {
+                    capabilities |= CAPABILITY_MUTE;
+                } else {
+                    capabilities &= ~CAPABILITY_MUTE;
+                }
+            }
+            mAudioManager.setMicrophoneMute(
+                    mCall.hasControl(android.companion.Telecom.Call.UNMUTE));
+            if (capabilities != getConnectionCapabilities()) {
+                setConnectionCapabilities(capabilities);
+            }
+        }
+
+        @Override
+        public void onAnswer(int videoState) {
+            sendCallAction(android.companion.Telecom.Call.ACCEPT);
+        }
+
+        @Override
+        public void onReject() {
+            sendCallAction(android.companion.Telecom.Call.REJECT);
+        }
+
+        @Override
+        public void onReject(int rejectReason) {
+            onReject();
+        }
+
+        @Override
+        public void onReject(String replyMessage) {
+            onReject();
+        }
+
+        @Override
+        public void onSilence() {
+            sendCallAction(android.companion.Telecom.Call.SILENCE);
+        }
+
+        @Override
+        public void onHold() {
+            sendCallAction(android.companion.Telecom.Call.PUT_ON_HOLD);
+        }
+
+        @Override
+        public void onUnhold() {
+            sendCallAction(android.companion.Telecom.Call.TAKE_OFF_HOLD);
+        }
+
+        @Override
+        public void onMuteStateChanged(boolean isMuted) {
+            sendCallAction(isMuted ? android.companion.Telecom.Call.MUTE
+                    : android.companion.Telecom.Call.UNMUTE);
+        }
+
+        @Override
+        public void onDisconnect() {
+            sendCallAction(android.companion.Telecom.Call.END);
+        }
+
+        @Override
+        public void onStateChanged(int state) {
+            mCallback.sendStateChange(mAssociationId, mCall.getId(), state);
+        }
+
+        private void sendCallAction(int action) {
+            mCallback.sendCallAction(mAssociationId, mCall.getId(), action);
+        }
+    }
+}
diff --git a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncData.java b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncData.java
new file mode 100644
index 0000000..1e4bb9a
--- /dev/null
+++ b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncData.java
@@ -0,0 +1,188 @@
+/*
+ * 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.annotation.NonNull;
+import android.companion.ContextSyncMessage;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+
+/** A read-only snapshot of an {@link ContextSyncMessage}. */
+class CallMetadataSyncData {
+
+    final Map<Long, CallMetadataSyncData.Call> mCalls = new HashMap<>();
+    final List<CallMetadataSyncData.Call> mRequests = new ArrayList<>();
+
+    public void addCall(CallMetadataSyncData.Call call) {
+        mCalls.put(call.getId(), call);
+    }
+
+    public boolean hasCall(long id) {
+        return mCalls.containsKey(id);
+    }
+
+    public Collection<CallMetadataSyncData.Call> getCalls() {
+        return mCalls.values();
+    }
+
+    public void addRequest(CallMetadataSyncData.Call call) {
+        mRequests.add(call);
+    }
+
+    public List<CallMetadataSyncData.Call> getRequests() {
+        return mRequests;
+    }
+
+    public static class Call implements Parcelable {
+        private long mId;
+        private String mCallerId;
+        private byte[] mAppIcon;
+        private String mAppName;
+        private String mAppIdentifier;
+        private int mStatus;
+        private final Set<Integer> mControls = new HashSet<>();
+
+        public static Call fromParcel(Parcel parcel) {
+            final Call call = new Call();
+            call.setId(parcel.readLong());
+            call.setCallerId(parcel.readString());
+            call.setAppIcon(parcel.readBlob());
+            call.setAppName(parcel.readString());
+            call.setAppIdentifier(parcel.readString());
+            call.setStatus(parcel.readInt());
+            final int numberOfControls = parcel.readInt();
+            for (int i = 0; i < numberOfControls; i++) {
+                call.addControl(parcel.readInt());
+            }
+            return call;
+        }
+
+        @Override
+        public void writeToParcel(Parcel parcel, int parcelableFlags) {
+            parcel.writeLong(mId);
+            parcel.writeString(mCallerId);
+            parcel.writeBlob(mAppIcon);
+            parcel.writeString(mAppName);
+            parcel.writeString(mAppIdentifier);
+            parcel.writeInt(mStatus);
+            parcel.writeInt(mControls.size());
+            for (int control : mControls) {
+                parcel.writeInt(control);
+            }
+        }
+
+        void setId(long id) {
+            mId = id;
+        }
+
+        void setCallerId(String callerId) {
+            mCallerId = callerId;
+        }
+
+        void setAppIcon(byte[] appIcon) {
+            mAppIcon = appIcon;
+        }
+
+        void setAppName(String appName) {
+            mAppName = appName;
+        }
+
+        void setAppIdentifier(String appIdentifier) {
+            mAppIdentifier = appIdentifier;
+        }
+
+        void setStatus(int status) {
+            mStatus = status;
+        }
+
+        void addControl(int control) {
+            mControls.add(control);
+        }
+
+        long getId() {
+            return mId;
+        }
+
+        String getCallerId() {
+            return mCallerId;
+        }
+
+        byte[] getAppIcon() {
+            return mAppIcon;
+        }
+
+        String getAppName() {
+            return mAppName;
+        }
+
+        String getAppIdentifier() {
+            return mAppIdentifier;
+        }
+
+        int getStatus() {
+            return mStatus;
+        }
+
+        Set<Integer> getControls() {
+            return mControls;
+        }
+
+        boolean hasControl(int control) {
+            return mControls.contains(control);
+        }
+
+        @Override
+        public boolean equals(Object other) {
+            if (other instanceof CallMetadataSyncData.Call) {
+                return ((Call) other).getId() == getId();
+            }
+            return false;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hashCode(mId);
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @NonNull public static final Parcelable.Creator<Call> CREATOR = new Parcelable.Creator<>() {
+
+            @Override
+            public Call createFromParcel(Parcel source) {
+                return Call.fromParcel(source);
+            }
+
+            @Override
+            public Call[] newArray(int size) {
+                return new Call[size];
+            }
+        };
+    }
+}
diff --git a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceCall.java b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceCall.java
index 077fd2a..dd0bbf2 100644
--- a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceCall.java
+++ b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceCall.java
@@ -39,6 +39,8 @@
 
     private static final String TAG = "CrossDeviceCall";
 
+    public static final String EXTRA_CALL_ID =
+            "com.android.companion.datatransfer.contextsync.extra.CALL_ID";
     private static final int APP_ICON_BITMAP_DIMENSION = 256;
 
     private static final AtomicLong sNextId = new AtomicLong(1);
@@ -47,6 +49,7 @@
     private final Call mCall;
     @VisibleForTesting boolean mIsEnterprise;
     @VisibleForTesting boolean mIsOtt;
+    private final String mCallingAppPackageName;
     private String mCallingAppName;
     private byte[] mCallingAppIcon;
     private String mCallerDisplayName;
@@ -59,7 +62,7 @@
             CallAudioState callAudioState) {
         mId = sNextId.getAndIncrement();
         mCall = call;
-        final String callingAppPackageName = call != null
+        mCallingAppPackageName = call != null
                 ? call.getDetails().getAccountHandle().getComponentName().getPackageName() : null;
         mIsOtt = call != null
                 && (call.getDetails().getCallCapabilities() & Call.Details.PROPERTY_SELF_MANAGED)
@@ -69,13 +72,13 @@
                 == Call.Details.PROPERTY_ENTERPRISE_CALL;
         try {
             final ApplicationInfo applicationInfo = packageManager
-                    .getApplicationInfo(callingAppPackageName,
+                    .getApplicationInfo(mCallingAppPackageName,
                             PackageManager.ApplicationInfoFlags.of(0));
             mCallingAppName = packageManager.getApplicationLabel(applicationInfo).toString();
             mCallingAppIcon = renderDrawableToByteArray(
                     packageManager.getApplicationIcon(applicationInfo));
         } catch (PackageManager.NameNotFoundException e) {
-            Slog.e(TAG, "Could not get application info for package " + callingAppPackageName, e);
+            Slog.e(TAG, "Could not get application info for package " + mCallingAppPackageName, e);
         }
         mIsMuted = callAudioState != null && callAudioState.isMuted();
         if (call != null) {
@@ -170,7 +173,8 @@
         }
     }
 
-    private int convertStateToStatus(int callState) {
+    /** Converts a Telecom call state to a Context Sync status. */
+    public static int convertStateToStatus(int callState) {
         switch (callState) {
             case Call.STATE_HOLDING:
                 return android.companion.Telecom.Call.ON_HOLD;
@@ -178,20 +182,30 @@
                 return android.companion.Telecom.Call.ONGOING;
             case Call.STATE_RINGING:
                 return android.companion.Telecom.Call.RINGING;
-            case Call.STATE_NEW:
-            case Call.STATE_DIALING:
-            case Call.STATE_DISCONNECTED:
-            case Call.STATE_SELECT_PHONE_ACCOUNT:
-            case Call.STATE_CONNECTING:
-            case Call.STATE_DISCONNECTING:
-            case Call.STATE_PULLING_CALL:
-            case Call.STATE_AUDIO_PROCESSING:
-            case Call.STATE_SIMULATED_RINGING:
             default:
                 return android.companion.Telecom.Call.UNKNOWN_STATUS;
         }
     }
 
+    /**
+     * Converts a Context Sync status to a Telecom call state. Note that this is lossy for
+     * and RINGING_SILENCED, as Telecom does not distinguish between RINGING and RINGING_SILENCED.
+     */
+    public static int convertStatusToState(int status) {
+        switch (status) {
+            case android.companion.Telecom.Call.ON_HOLD:
+                return Call.STATE_HOLDING;
+            case android.companion.Telecom.Call.ONGOING:
+                return Call.STATE_ACTIVE;
+            case android.companion.Telecom.Call.RINGING:
+            case android.companion.Telecom.Call.RINGING_SILENCED:
+                return Call.STATE_RINGING;
+            case android.companion.Telecom.Call.UNKNOWN_STATUS:
+            default:
+                return Call.STATE_NEW;
+        }
+    }
+
     public long getId() {
         return mId;
     }
@@ -208,6 +222,10 @@
         return mCallingAppIcon;
     }
 
+    public String getCallingAppPackageName() {
+        return mCallingAppPackageName;
+    }
+
     /**
      * Get a human-readable "caller id" to display as the origin of the call.
      *
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..a3e095e 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;
@@ -95,27 +96,29 @@
     /**
      * Add a listener to receive callbacks when a message is received for the message type
      */
-    @GuardedBy("mTransports")
     public void addListener(int message, @NonNull IOnMessageReceivedListener listener) {
         mMessageListeners.put(message, listener);
-        for (int i = 0; i < mTransports.size(); i++) {
-            mTransports.valueAt(i).addListener(message, listener);
+        synchronized (mTransports) {
+            for (int i = 0; i < mTransports.size(); i++) {
+                mTransports.valueAt(i).addListener(message, listener);
+            }
         }
     }
 
     /**
      * Add a listener to receive callbacks when any of the transports is changed
      */
-    @GuardedBy("mTransports")
     public void addListener(IOnTransportsChangedListener listener) {
         Slog.i(TAG, "Registering OnTransportsChangedListener");
         mTransportsListeners.register(listener);
         List<AssociationInfo> associations = new ArrayList<>();
-        for (int i = 0; i < mTransports.size(); i++) {
-            AssociationInfo association = mAssociationStore.getAssociationById(
-                    mTransports.keyAt(i));
-            if (association != null) {
-                associations.add(association);
+        synchronized (mTransports) {
+            for (int i = 0; i < mTransports.size(); i++) {
+                AssociationInfo association = mAssociationStore.getAssociationById(
+                        mTransports.keyAt(i));
+                if (association != null) {
+                    associations.add(association);
+                }
             }
         }
         mTransportsListeners.broadcast(listener1 -> {
@@ -147,18 +150,19 @@
     /**
      * Send a message to remote devices through the transports
      */
-    @GuardedBy("mTransports")
     public void sendMessage(int message, byte[] data, int[] associationIds) {
         Slog.i(TAG, "Sending message 0x" + Integer.toHexString(message)
                 + " data length " + data.length);
-        for (int i = 0; i < associationIds.length; i++) {
-            if (mTransports.contains(associationIds[i])) {
-                try {
-                    mTransports.get(associationIds[i]).sendMessage(message, data);
-                } catch (IOException e) {
-                    Slog.e(TAG, "Failed to send message 0x" + Integer.toHexString(message)
-                            + " data length " + data.length + " to association "
-                            + associationIds[i]);
+        synchronized (mTransports) {
+            for (int i = 0; i < associationIds.length; i++) {
+                if (mTransports.contains(associationIds[i])) {
+                    try {
+                        mTransports.get(associationIds[i]).sendMessage(message, data);
+                    } catch (IOException e) {
+                        Slog.e(TAG, "Failed to send message 0x" + Integer.toHexString(message)
+                                + " data length " + data.length + " to association "
+                                + associationIds[i]);
+                    }
                 }
             }
         }
@@ -214,14 +218,15 @@
         }
     }
 
-    @GuardedBy("mTransports")
     private void notifyOnTransportsChanged() {
         List<AssociationInfo> associations = new ArrayList<>();
-        for (int i = 0; i < mTransports.size(); i++) {
-            AssociationInfo association = mAssociationStore.getAssociationById(
-                    mTransports.keyAt(i));
-            if (association != null) {
-                associations.add(association);
+        synchronized (mTransports) {
+            for (int i = 0; i < mTransports.size(); i++) {
+                AssociationInfo association = mAssociationStore.getAssociationById(
+                        mTransports.keyAt(i));
+                if (association != null) {
+                    associations.add(association);
+                }
             }
         }
         mTransportsListeners.broadcast(listener -> {
@@ -232,14 +237,15 @@
         });
     }
 
-    @GuardedBy("mTransports")
     private void initializeTransport(int associationId, ParcelFileDescriptor fd) {
         Slog.i(TAG, "Initializing transport");
         if (!isSecureTransportEnabled()) {
             Transport transport = new RawTransport(associationId, fd, mContext);
             addMessageListenersToTransport(transport);
             transport.start();
-            mTransports.put(associationId, transport);
+            synchronized (mTransports) {
+                mTransports.put(associationId, transport);
+            }
             Slog.i(TAG, "RawTransport is created");
             return;
         }
@@ -282,7 +288,6 @@
     /**
      * Depending on the remote platform info to decide which transport should be created
      */
-    @GuardedBy("CompanionTransportManager.this.mTransports")
     private void onPlatformInfoReceived(int associationId, byte[] data) {
         if (mTempTransport.getAssociationId() != associationId) {
             return;
@@ -329,7 +334,9 @@
         }
         addMessageListenersToTransport(transport);
         transport.start();
-        mTransports.put(transport.getAssociationId(), transport);
+        synchronized (mTransports) {
+            mTransports.put(transport.getAssociationId(), transport);
+        }
         // Doesn't need to notifyTransportsChanged here, it'll be done in attachSystemDataTransport
     }
 
@@ -350,6 +357,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/companion/java/com/android/server/companion/virtual/InputController.java b/services/companion/java/com/android/server/companion/virtual/InputController.java
index 1a0588e..307f7bf 100644
--- a/services/companion/java/com/android/server/companion/virtual/InputController.java
+++ b/services/companion/java/com/android/server/companion/virtual/InputController.java
@@ -367,7 +367,7 @@
                         "Could not send key event to input device for given token");
             }
             return mNativeWrapper.writeDpadKeyEvent(inputDeviceDescriptor.getNativePointer(),
-                    event.getKeyCode(), event.getAction());
+                    event.getKeyCode(), event.getAction(), event.getEventTimeNanos());
         }
     }
 
@@ -380,7 +380,7 @@
                         "Could not send key event to input device for given token");
             }
             return mNativeWrapper.writeKeyEvent(inputDeviceDescriptor.getNativePointer(),
-                    event.getKeyCode(), event.getAction());
+                    event.getKeyCode(), event.getAction(), event.getEventTimeNanos());
         }
     }
 
@@ -398,7 +398,7 @@
                         "Display id associated with this mouse is not currently targetable");
             }
             return mNativeWrapper.writeButtonEvent(inputDeviceDescriptor.getNativePointer(),
-                    event.getButtonCode(), event.getAction());
+                    event.getButtonCode(), event.getAction(), event.getEventTimeNanos());
         }
     }
 
@@ -412,7 +412,8 @@
             }
             return mNativeWrapper.writeTouchEvent(inputDeviceDescriptor.getNativePointer(),
                     event.getPointerId(), event.getToolType(), event.getAction(), event.getX(),
-                    event.getY(), event.getPressure(), event.getMajorAxisSize());
+                    event.getY(), event.getPressure(), event.getMajorAxisSize(),
+                    event.getEventTimeNanos());
         }
     }
 
@@ -430,7 +431,7 @@
                         "Display id associated with this mouse is not currently targetable");
             }
             return mNativeWrapper.writeRelativeEvent(inputDeviceDescriptor.getNativePointer(),
-                    event.getRelativeX(), event.getRelativeY());
+                    event.getRelativeX(), event.getRelativeY(), event.getEventTimeNanos());
         }
     }
 
@@ -448,7 +449,7 @@
                         "Display id associated with this mouse is not currently targetable");
             }
             return mNativeWrapper.writeScrollEvent(inputDeviceDescriptor.getNativePointer(),
-                    event.getXAxisMovement(), event.getYAxisMovement());
+                    event.getXAxisMovement(), event.getYAxisMovement(), event.getEventTimeNanos());
         }
     }
 
@@ -514,15 +515,19 @@
     private static native long nativeOpenUinputTouchscreen(String deviceName, int vendorId,
             int productId, String phys, int height, int width);
     private static native void nativeCloseUinput(long ptr);
-    private static native boolean nativeWriteDpadKeyEvent(long ptr, int androidKeyCode, int action);
-    private static native boolean nativeWriteKeyEvent(long ptr, int androidKeyCode, int action);
-    private static native boolean nativeWriteButtonEvent(long ptr, int buttonCode, int action);
+    private static native boolean nativeWriteDpadKeyEvent(long ptr, int androidKeyCode, int action,
+            long eventTimeNanos);
+    private static native boolean nativeWriteKeyEvent(long ptr, int androidKeyCode, int action,
+            long eventTimeNanos);
+    private static native boolean nativeWriteButtonEvent(long ptr, int buttonCode, int action,
+            long eventTimeNanos);
     private static native boolean nativeWriteTouchEvent(long ptr, int pointerId, int toolType,
-            int action, float locationX, float locationY, float pressure, float majorAxisSize);
+            int action, float locationX, float locationY, float pressure, float majorAxisSize,
+            long eventTimeNanos);
     private static native boolean nativeWriteRelativeEvent(long ptr, float relativeX,
-            float relativeY);
+            float relativeY, long eventTimeNanos);
     private static native boolean nativeWriteScrollEvent(long ptr, float xAxisMovement,
-            float yAxisMovement);
+            float yAxisMovement, long eventTimeNanos);
 
     /** Wrapper around the static native methods for tests. */
     @VisibleForTesting
@@ -550,32 +555,37 @@
             nativeCloseUinput(ptr);
         }
 
-        public boolean writeDpadKeyEvent(long ptr, int androidKeyCode, int action) {
-            return nativeWriteDpadKeyEvent(ptr, androidKeyCode, action);
+        public boolean writeDpadKeyEvent(long ptr, int androidKeyCode, int action,
+                long eventTimeNanos) {
+            return nativeWriteDpadKeyEvent(ptr, androidKeyCode, action, eventTimeNanos);
         }
 
-        public boolean writeKeyEvent(long ptr, int androidKeyCode, int action) {
-            return nativeWriteKeyEvent(ptr, androidKeyCode, action);
+        public boolean writeKeyEvent(long ptr, int androidKeyCode, int action,
+                long eventTimeNanos) {
+            return nativeWriteKeyEvent(ptr, androidKeyCode, action, eventTimeNanos);
         }
 
-        public boolean writeButtonEvent(long ptr, int buttonCode, int action) {
-            return nativeWriteButtonEvent(ptr, buttonCode, action);
+        public boolean writeButtonEvent(long ptr, int buttonCode, int action,
+                long eventTimeNanos) {
+            return nativeWriteButtonEvent(ptr, buttonCode, action, eventTimeNanos);
         }
 
         public boolean writeTouchEvent(long ptr, int pointerId, int toolType, int action,
-                float locationX, float locationY, float pressure, float majorAxisSize) {
+                float locationX, float locationY, float pressure, float majorAxisSize,
+                long eventTimeNanos) {
             return nativeWriteTouchEvent(ptr, pointerId, toolType,
                     action, locationX, locationY,
-                    pressure, majorAxisSize);
+                    pressure, majorAxisSize, eventTimeNanos);
         }
 
-        public boolean writeRelativeEvent(long ptr, float relativeX, float relativeY) {
-            return nativeWriteRelativeEvent(ptr, relativeX, relativeY);
+        public boolean writeRelativeEvent(long ptr, float relativeX, float relativeY,
+                long eventTimeNanos) {
+            return nativeWriteRelativeEvent(ptr, relativeX, relativeY, eventTimeNanos);
         }
 
-        public boolean writeScrollEvent(long ptr, float xAxisMovement, float yAxisMovement) {
-            return nativeWriteScrollEvent(ptr, xAxisMovement,
-                    yAxisMovement);
+        public boolean writeScrollEvent(long ptr, float xAxisMovement, float yAxisMovement,
+                long eventTimeNanos) {
+            return nativeWriteScrollEvent(ptr, xAxisMovement, yAxisMovement, eventTimeNanos);
         }
     }
 
diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
index ae88f24..de0f68c 100644
--- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
+++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
@@ -404,39 +404,44 @@
     public void close() {
         super.close_enforcePermission();
         // Remove about-to-be-closed virtual device from the service before butchering it.
-        mService.removeVirtualDevice(mDeviceId);
+        boolean removed = mService.removeVirtualDevice(mDeviceId);
         mDeviceId = Context.DEVICE_ID_INVALID;
 
-        VirtualDisplayWrapper[] virtualDisplaysToBeReleased;
-        synchronized (mVirtualDeviceLock) {
-            if (mVirtualAudioController != null) {
-                mVirtualAudioController.stopListening();
-                mVirtualAudioController = null;
-            }
-            mLocaleList = null;
-            virtualDisplaysToBeReleased = new VirtualDisplayWrapper[mVirtualDisplays.size()];
-            for (int i = 0; i < mVirtualDisplays.size(); i++) {
-                virtualDisplaysToBeReleased[i] = mVirtualDisplays.valueAt(i);
-            }
-            mVirtualDisplays.clear();
-            mVirtualSensorList = null;
-            mVirtualSensors.clear();
+        // Device is already closed.
+        if (!removed) {
+            return;
         }
-        // Destroy the display outside locked section.
-        for (VirtualDisplayWrapper virtualDisplayWrapper : virtualDisplaysToBeReleased) {
-            mDisplayManager.releaseVirtualDisplay(virtualDisplayWrapper.getToken());
-            // The releaseVirtualDisplay call above won't trigger
-            // VirtualDeviceImpl.onVirtualDisplayRemoved callback because we already removed the
-            // virtual device from the service - we release the other display-tied resources here
-            // with the guarantee it will be done exactly once.
-            releaseOwnedVirtualDisplayResources(virtualDisplayWrapper);
-        }
-
-        mAppToken.unlinkToDeath(this, 0);
-        mCameraAccessController.stopObservingIfNeeded();
 
         final long ident = Binder.clearCallingIdentity();
         try {
+            VirtualDisplayWrapper[] virtualDisplaysToBeReleased;
+            synchronized (mVirtualDeviceLock) {
+                if (mVirtualAudioController != null) {
+                    mVirtualAudioController.stopListening();
+                    mVirtualAudioController = null;
+                }
+                mLocaleList = null;
+                virtualDisplaysToBeReleased = new VirtualDisplayWrapper[mVirtualDisplays.size()];
+                for (int i = 0; i < mVirtualDisplays.size(); i++) {
+                    virtualDisplaysToBeReleased[i] = mVirtualDisplays.valueAt(i);
+                }
+                mVirtualDisplays.clear();
+                mVirtualSensorList = null;
+                mVirtualSensors.clear();
+            }
+            // Destroy the display outside locked section.
+            for (VirtualDisplayWrapper virtualDisplayWrapper : virtualDisplaysToBeReleased) {
+                mDisplayManager.releaseVirtualDisplay(virtualDisplayWrapper.getToken());
+                // The releaseVirtualDisplay call above won't trigger
+                // VirtualDeviceImpl.onVirtualDisplayRemoved callback because we already removed the
+                // virtual device from the service - we release the other display-tied resources
+                // here with the guarantee it will be done exactly once.
+                releaseOwnedVirtualDisplayResources(virtualDisplayWrapper);
+            }
+
+            mAppToken.unlinkToDeath(this, 0);
+            mCameraAccessController.stopObservingIfNeeded();
+
             mInputController.close();
             mSensorController.close();
         } finally {
diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
index 291c0587..ad4c0bf 100644
--- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
@@ -151,15 +151,14 @@
     }
 
     void onCameraAccessBlocked(int appUid) {
-        synchronized (mVirtualDeviceManagerLock) {
-            for (int i = 0; i < mVirtualDevices.size(); i++) {
-                CharSequence deviceName = mVirtualDevices.valueAt(i).getDisplayName();
-                mVirtualDevices.valueAt(i).showToastWhereUidIsRunning(appUid,
-                        getContext().getString(
-                                com.android.internal.R.string.vdm_camera_access_denied,
-                                deviceName),
-                        Toast.LENGTH_LONG, Looper.myLooper());
-            }
+        ArrayList<VirtualDeviceImpl> virtualDevicesSnapshot = getVirtualDevicesSnapshot();
+        for (int i = 0; i < virtualDevicesSnapshot.size(); i++) {
+            VirtualDeviceImpl virtualDevice = virtualDevicesSnapshot.get(i);
+            virtualDevice.showToastWhereUidIsRunning(appUid,
+                    getContext().getString(
+                            com.android.internal.R.string.vdm_camera_access_denied,
+                            virtualDevice.getDisplayName()),
+                    Toast.LENGTH_LONG, Looper.myLooper());
         }
     }
 
@@ -203,8 +202,19 @@
         }
     }
 
-    void removeVirtualDevice(int deviceId) {
+    /**
+     * Remove the virtual device. Sends the
+     * {@link VirtualDeviceManager#ACTION_VIRTUAL_DEVICE_REMOVED} broadcast as a result.
+     *
+     * @param deviceId deviceId to be removed
+     * @return {@code true} if the device was removed, {@code false} if the operation was a no-op
+     */
+    boolean removeVirtualDevice(int deviceId) {
         synchronized (mVirtualDeviceManagerLock) {
+            if (!mVirtualDevices.contains(deviceId)) {
+                return false;
+            }
+
             mAppsOnVirtualDevices.remove(deviceId);
             mVirtualDevices.remove(deviceId);
         }
@@ -224,6 +234,7 @@
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
+        return true;
     }
 
     private void syncVirtualDevicesToCdmAssociations(List<AssociationInfo> associations) {
@@ -249,7 +260,6 @@
         for (VirtualDeviceImpl virtualDevice : virtualDevicesToRemove) {
             virtualDevice.close();
         }
-
     }
 
     private void registerCdmAssociationListener() {
@@ -265,6 +275,16 @@
         cdm.removeOnAssociationsChangedListener(mCdmAssociationListener);
     }
 
+    private ArrayList<VirtualDeviceImpl> getVirtualDevicesSnapshot() {
+        synchronized (mVirtualDeviceManagerLock) {
+            ArrayList<VirtualDeviceImpl> virtualDevices = new ArrayList<>(mVirtualDevices.size());
+            for (int i = 0; i < mVirtualDevices.size(); i++) {
+                virtualDevices.add(mVirtualDevices.valueAt(i));
+            }
+            return virtualDevices;
+        }
+    }
+
     class VirtualDeviceManagerImpl extends IVirtualDeviceManager.Stub {
 
         private final VirtualDeviceImpl.PendingTrampolineCallback mPendingTrampolineCallback =
@@ -314,6 +334,17 @@
             Objects.requireNonNull(activityListener);
             Objects.requireNonNull(soundEffectListener);
 
+            final UserHandle userHandle = getCallingUserHandle();
+            final CameraAccessController cameraAccessController =
+                    getCameraAccessController(userHandle);
+            final int deviceId = sNextUniqueIndex.getAndIncrement();
+            final Consumer<ArraySet<Integer>> runningAppsChangedCallback =
+                    runningUids -> notifyRunningAppsChanged(deviceId, runningUids);
+            VirtualDeviceImpl virtualDevice = new VirtualDeviceImpl(getContext(),
+                    associationInfo, VirtualDeviceManagerService.this, token, callingUid,
+                    deviceId, cameraAccessController,
+                    mPendingTrampolineCallback, activityListener,
+                    soundEffectListener, runningAppsChangedCallback, params);
             synchronized (mVirtualDeviceManagerLock) {
                 if (mVirtualDevices.size() == 0) {
                     final long callindId = Binder.clearCallingIdentity();
@@ -323,21 +354,9 @@
                         Binder.restoreCallingIdentity(callindId);
                     }
                 }
-
-                final UserHandle userHandle = getCallingUserHandle();
-                final CameraAccessController cameraAccessController =
-                        getCameraAccessController(userHandle);
-                final int deviceId = sNextUniqueIndex.getAndIncrement();
-                final Consumer<ArraySet<Integer>> runningAppsChangedCallback =
-                        runningUids -> notifyRunningAppsChanged(deviceId, runningUids);
-                VirtualDeviceImpl virtualDevice = new VirtualDeviceImpl(getContext(),
-                        associationInfo, VirtualDeviceManagerService.this, token, callingUid,
-                        deviceId, cameraAccessController,
-                        mPendingTrampolineCallback, activityListener,
-                        soundEffectListener, runningAppsChangedCallback, params);
                 mVirtualDevices.put(deviceId, virtualDevice);
-                return virtualDevice;
             }
+            return virtualDevice;
         }
 
         @Override // Binder call
@@ -399,12 +418,11 @@
             if (displayId == Display.INVALID_DISPLAY || displayId == Display.DEFAULT_DISPLAY) {
                 return Context.DEVICE_ID_DEFAULT;
             }
-            synchronized (mVirtualDeviceManagerLock) {
-                for (int i = 0; i < mVirtualDevices.size(); i++) {
-                    VirtualDeviceImpl virtualDevice = mVirtualDevices.valueAt(i);
-                    if (virtualDevice.isDisplayOwnedByVirtualDevice(displayId)) {
-                        return virtualDevice.getDeviceId();
-                    }
+            ArrayList<VirtualDeviceImpl> virtualDevicesSnapshot = getVirtualDevicesSnapshot();
+            for (int i = 0; i < virtualDevicesSnapshot.size(); i++) {
+                VirtualDeviceImpl virtualDevice = virtualDevicesSnapshot.get(i);
+                if (virtualDevice.isDisplayOwnedByVirtualDevice(displayId)) {
+                    return virtualDevice.getDeviceId();
                 }
             }
             return Context.DEVICE_ID_DEFAULT;
@@ -496,10 +514,9 @@
                 return;
             }
             fout.println("Created virtual devices: ");
-            synchronized (mVirtualDeviceManagerLock) {
-                for (int i = 0; i < mVirtualDevices.size(); i++) {
-                    mVirtualDevices.valueAt(i).dump(fd, fout, args);
-                }
+            ArrayList<VirtualDeviceImpl> virtualDevicesSnapshot = getVirtualDevicesSnapshot();
+            for (int i = 0; i < virtualDevicesSnapshot.size(); i++) {
+                virtualDevicesSnapshot.get(i).dump(fd, fout, args);
             }
         }
     }
@@ -516,33 +533,30 @@
 
         @Override
         public int getDeviceOwnerUid(int deviceId) {
+            VirtualDeviceImpl virtualDevice;
             synchronized (mVirtualDeviceManagerLock) {
-                VirtualDeviceImpl virtualDevice = mVirtualDevices.get(deviceId);
-                return virtualDevice != null ? virtualDevice.getOwnerUid() : Process.INVALID_UID;
+                virtualDevice = mVirtualDevices.get(deviceId);
             }
+            return virtualDevice != null ? virtualDevice.getOwnerUid() : Process.INVALID_UID;
         }
 
         @Override
         public @Nullable VirtualSensor getVirtualSensor(int deviceId, int handle) {
+            VirtualDeviceImpl virtualDevice;
             synchronized (mVirtualDeviceManagerLock) {
-                VirtualDeviceImpl virtualDevice = mVirtualDevices.get(deviceId);
-                if (virtualDevice != null) {
-                    return virtualDevice.getVirtualSensorByHandle(handle);
-                }
+                virtualDevice = mVirtualDevices.get(deviceId);
             }
-            return null;
+            return virtualDevice != null ? virtualDevice.getVirtualSensorByHandle(handle) : null;
         }
 
         @Override
         public @NonNull ArraySet<Integer> getDeviceIdsForUid(int uid) {
+            ArrayList<VirtualDeviceImpl> virtualDevicesSnapshot = getVirtualDevicesSnapshot();
             ArraySet<Integer> result = new ArraySet<>();
-            synchronized (mVirtualDeviceManagerLock) {
-                int size = mVirtualDevices.size();
-                for (int i = 0; i < size; i++) {
-                    VirtualDeviceImpl device = mVirtualDevices.valueAt(i);
-                    if (device.isAppRunningOnVirtualDevice(uid)) {
-                        result.add(device.getDeviceId());
-                    }
+            for (int i = 0; i < virtualDevicesSnapshot.size(); i++) {
+                VirtualDeviceImpl device = virtualDevicesSnapshot.get(i);
+                if (device.isAppRunningOnVirtualDevice(uid)) {
+                    result.add(device.getDeviceId());
                 }
             }
             return result;
@@ -630,12 +644,10 @@
 
         @Override
         public boolean isAppRunningOnAnyVirtualDevice(int uid) {
-            synchronized (mVirtualDeviceManagerLock) {
-                int size = mVirtualDevices.size();
-                for (int i = 0; i < size; i++) {
-                    if (mVirtualDevices.valueAt(i).isAppRunningOnVirtualDevice(uid)) {
-                        return true;
-                    }
+            ArrayList<VirtualDeviceImpl> virtualDevicesSnapshot = getVirtualDevicesSnapshot();
+            for (int i = 0; i < virtualDevicesSnapshot.size(); i++) {
+                if (virtualDevicesSnapshot.get(i).isAppRunningOnVirtualDevice(uid)) {
+                    return true;
                 }
             }
             return false;
@@ -643,12 +655,10 @@
 
         @Override
         public boolean isDisplayOwnedByAnyVirtualDevice(int displayId) {
-            synchronized (mVirtualDeviceManagerLock) {
-                int size = mVirtualDevices.size();
-                for (int i = 0; i < size; i++) {
-                    if (mVirtualDevices.valueAt(i).isDisplayOwnedByVirtualDevice(displayId)) {
-                        return true;
-                    }
+            ArrayList<VirtualDeviceImpl> virtualDevicesSnapshot = getVirtualDevicesSnapshot();
+            for (int i = 0; i < virtualDevicesSnapshot.size(); i++) {
+                if (virtualDevicesSnapshot.get(i).isDisplayOwnedByVirtualDevice(displayId)) {
+                    return true;
                 }
             }
             return false;
diff --git a/services/core/Android.bp b/services/core/Android.bp
index cfdf3ac..f8d19ec 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -161,6 +161,7 @@
         "android.hardware.health-V2-java", // AIDL
         "android.hardware.health-translate-java",
         "android.hardware.light-V1-java",
+        "android.hardware.security.rkp-V3-java",
         "android.hardware.tv.cec-V1.1-java",
         "android.hardware.tv.hdmi.cec-V1-java",
         "android.hardware.tv.hdmi.connection-V1-java",
@@ -177,6 +178,7 @@
         "android.hardware.power.stats-V2-java",
         "android.hardware.power-V4-java",
         "android.hidl.manager-V1.2-java",
+        "cbor-java",
         "icu4j_calendar_astronomer",
         "netd-client",
         "overlayable_policy_aidl-java",
diff --git a/services/core/java/android/os/BatteryStatsInternal.java b/services/core/java/android/os/BatteryStatsInternal.java
index c6f63dd..0713999 100644
--- a/services/core/java/android/os/BatteryStatsInternal.java
+++ b/services/core/java/android/os/BatteryStatsInternal.java
@@ -17,7 +17,6 @@
 package android.os;
 
 import android.annotation.IntDef;
-import android.annotation.NonNull;
 import android.net.Network;
 
 import com.android.internal.os.BinderCallsStats;
@@ -39,15 +38,21 @@
     public static final int CPU_WAKEUP_SUBSYSTEM_UNKNOWN = -1;
     public static final int CPU_WAKEUP_SUBSYSTEM_ALARM = 1;
     public static final int CPU_WAKEUP_SUBSYSTEM_WIFI = 2;
+    public static final int CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER = 3;
+    public static final int CPU_WAKEUP_SUBSYSTEM_SENSOR = 4;
+    public static final int CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA = 5;
 
     /** @hide */
     @IntDef(prefix = {"CPU_WAKEUP_SUBSYSTEM_"}, value = {
             CPU_WAKEUP_SUBSYSTEM_UNKNOWN,
             CPU_WAKEUP_SUBSYSTEM_ALARM,
             CPU_WAKEUP_SUBSYSTEM_WIFI,
+            CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER,
+            CPU_WAKEUP_SUBSYSTEM_SENSOR,
+            CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA,
     })
     @Retention(RetentionPolicy.SOURCE)
-    @interface CpuWakeupSubsystem {
+    public @interface CpuWakeupSubsystem {
     }
 
     /**
@@ -105,19 +110,16 @@
     public abstract void noteBinderThreadNativeIds(int[] binderThreadNativeTids);
 
     /**
-     * Reports any activity that could potentially have caused the CPU to wake up.
-     * Accepts a timestamp to allow free ordering between the event and its reporting.
-     * @param subsystem The subsystem this activity should be attributed to.
-     * @param elapsedMillis The time when this activity happened in the elapsed timebase.
-     * @param uids The uid (or uids) that should be blamed for this activity.
-     */
-    public abstract void noteCpuWakingActivity(@CpuWakeupSubsystem int subsystem,
-            long elapsedMillis, @NonNull int... uids);
-
-    /**
      * Reports a sound trigger recognition event that may have woken up the CPU.
      * @param elapsedMillis The time when the event happened in the elapsed timebase.
      * @param uid The uid that requested this trigger.
      */
     public abstract void noteWakingSoundTrigger(long elapsedMillis, int uid);
+
+    /**
+     * Reports an alarm batch that would have woken up the CPU.
+     * @param elapsedMillis The time at which this alarm batch was scheduled to go off.
+     * @param uids the uids of all apps that have any alarm in this batch.
+     */
+    public abstract void noteWakingAlarmBatch(long elapsedMillis, int... uids);
 }
diff --git a/services/core/java/com/android/server/BinaryTransparencyService.java b/services/core/java/com/android/server/BinaryTransparencyService.java
index 3ecf933..8fc30e4 100644
--- a/services/core/java/com/android/server/BinaryTransparencyService.java
+++ b/services/core/java/com/android/server/BinaryTransparencyService.java
@@ -80,7 +80,7 @@
 import android.util.apk.ApkSigningBlockUtils;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.expresslog.Histogram;
+import com.android.modules.expresslog.Histogram;
 import com.android.internal.os.IBinaryTransparencyService;
 import com.android.internal.util.FrameworkStatsLog;
 import com.android.server.pm.ApexManager;
diff --git a/services/core/java/com/android/server/DockObserver.java b/services/core/java/com/android/server/DockObserver.java
index 3487613..5156c54 100644
--- a/services/core/java/com/android/server/DockObserver.java
+++ b/services/core/java/com/android/server/DockObserver.java
@@ -70,7 +70,7 @@
 
     private boolean mUpdatesStopped;
 
-    private final boolean mKeepDreamingWhenUndocking;
+    private final boolean mKeepDreamingWhenUnplugging;
     private final boolean mAllowTheaterModeWakeFromDock;
 
     private final List<ExtconStateConfig> mExtconStateConfigs;
@@ -167,8 +167,8 @@
         mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
         mAllowTheaterModeWakeFromDock = context.getResources().getBoolean(
                 com.android.internal.R.bool.config_allowTheaterModeWakeFromDock);
-        mKeepDreamingWhenUndocking = context.getResources().getBoolean(
-                com.android.internal.R.bool.config_keepDreamingWhenUndocking);
+        mKeepDreamingWhenUnplugging = context.getResources().getBoolean(
+                com.android.internal.R.bool.config_keepDreamingWhenUnplugging);
         mDeviceProvisionedObserver = new DeviceProvisionedObserver(mHandler);
 
         mExtconStateConfigs = loadExtconStateConfigs(context);
@@ -237,7 +237,7 @@
     }
 
     private boolean allowWakeFromDock() {
-        if (mKeepDreamingWhenUndocking) {
+        if (mKeepDreamingWhenUnplugging) {
             return false;
         }
         return (mAllowTheaterModeWakeFromDock
diff --git a/services/core/java/com/android/server/OWNERS b/services/core/java/com/android/server/OWNERS
index 409f054..123cd328 100644
--- a/services/core/java/com/android/server/OWNERS
+++ b/services/core/java/com/android/server/OWNERS
@@ -27,6 +27,7 @@
 per-file **IpSec* = file:/services/core/java/com/android/server/vcn/OWNERS
 per-file *Location* = file:/services/core/java/com/android/server/location/OWNERS
 per-file *Network* = file:/services/core/java/com/android/server/net/OWNERS
+per-file *SoundTrigger* = file:/media/java/android/media/soundtrigger/OWNERS
 per-file *Storage* = file:/core/java/android/os/storage/OWNERS
 per-file *TimeUpdate* = file:/services/core/java/com/android/server/timezonedetector/OWNERS
 per-file DynamicSystemService.java = file:/packages/DynamicSystemInstallationService/OWNERS
diff --git a/services/core/java/com/android/server/PackageWatchdog.java b/services/core/java/com/android/server/PackageWatchdog.java
index 92889c0..f4f5c95 100644
--- a/services/core/java/com/android/server/PackageWatchdog.java
+++ b/services/core/java/com/android/server/PackageWatchdog.java
@@ -426,7 +426,7 @@
                                 }
                                 int impact = registeredObserver.onHealthCheckFailed(
                                         versionedPackage, failureReason, mitigationCount);
-                                if (impact != PackageHealthObserverImpact.USER_IMPACT_NONE
+                                if (impact != PackageHealthObserverImpact.USER_IMPACT_LEVEL_0
                                         && impact < currentObserverImpact) {
                                     currentObserverToNotify = registeredObserver;
                                     currentObserverImpact = impact;
@@ -466,7 +466,7 @@
             if (registeredObserver != null) {
                 int impact = registeredObserver.onHealthCheckFailed(
                         failingPackage, failureReason, 1);
-                if (impact != PackageHealthObserverImpact.USER_IMPACT_NONE
+                if (impact != PackageHealthObserverImpact.USER_IMPACT_LEVEL_0
                         && impact < currentObserverImpact) {
                     currentObserverToNotify = registeredObserver;
                     currentObserverImpact = impact;
@@ -494,7 +494,7 @@
                     PackageHealthObserver registeredObserver = observer.registeredObserver;
                     if (registeredObserver != null) {
                         int impact = registeredObserver.onBootLoop(mitigationCount);
-                        if (impact != PackageHealthObserverImpact.USER_IMPACT_NONE
+                        if (impact != PackageHealthObserverImpact.USER_IMPACT_LEVEL_0
                                 && impact < currentObserverImpact) {
                             currentObserverToNotify = registeredObserver;
                             currentObserverImpact = impact;
@@ -576,19 +576,25 @@
 
     /** Possible severity values of the user impact of a {@link PackageHealthObserver#execute}. */
     @Retention(SOURCE)
-    @IntDef(value = {PackageHealthObserverImpact.USER_IMPACT_NONE,
-                     PackageHealthObserverImpact.USER_IMPACT_LOW,
-                     PackageHealthObserverImpact.USER_IMPACT_MEDIUM,
-                     PackageHealthObserverImpact.USER_IMPACT_HIGH})
+    @IntDef(value = {PackageHealthObserverImpact.USER_IMPACT_LEVEL_0,
+                     PackageHealthObserverImpact.USER_IMPACT_LEVEL_10,
+                     PackageHealthObserverImpact.USER_IMPACT_LEVEL_30,
+                     PackageHealthObserverImpact.USER_IMPACT_LEVEL_50,
+                     PackageHealthObserverImpact.USER_IMPACT_LEVEL_60,
+                     PackageHealthObserverImpact.USER_IMPACT_LEVEL_70,
+                     PackageHealthObserverImpact.USER_IMPACT_LEVEL_100})
     public @interface PackageHealthObserverImpact {
         /** No action to take. */
-        int USER_IMPACT_NONE = 0;
+        int USER_IMPACT_LEVEL_0 = 0;
         /* Action has low user impact, user of a device will barely notice. */
-        int USER_IMPACT_LOW = 1;
-        /* Action has medium user impact, user of a device will likely notice. */
-        int USER_IMPACT_MEDIUM = 3;
+        int USER_IMPACT_LEVEL_10 = 10;
+        /* Actions having medium user impact, user of a device will likely notice. */
+        int USER_IMPACT_LEVEL_30 = 30;
+        int USER_IMPACT_LEVEL_50 = 50;
+        int USER_IMPACT_LEVEL_60 = 60;
+        int USER_IMPACT_LEVEL_70 = 70;
         /* Action has high user impact, a last resort, user of a device will be very frustrated. */
-        int USER_IMPACT_HIGH = 5;
+        int USER_IMPACT_LEVEL_100 = 100;
     }
 
     /** Register instances of this interface to receive notifications on package failure. */
@@ -633,7 +639,7 @@
          *                        boot loop (including this time).
          */
         default @PackageHealthObserverImpact int onBootLoop(int mitigationCount) {
-            return PackageHealthObserverImpact.USER_IMPACT_NONE;
+            return PackageHealthObserverImpact.USER_IMPACT_LEVEL_0;
         }
 
         /**
diff --git a/services/core/java/com/android/server/RescueParty.java b/services/core/java/com/android/server/RescueParty.java
index 3de65f9..6e2e5f7 100644
--- a/services/core/java/com/android/server/RescueParty.java
+++ b/services/core/java/com/android/server/RescueParty.java
@@ -107,7 +107,7 @@
     static final String NAMESPACE_TO_PACKAGE_MAPPING_FLAG =
             "namespace_to_package_mapping";
     @VisibleForTesting
-    static final long FACTORY_RESET_THROTTLE_DURATION_MS = TimeUnit.MINUTES.toMillis(10);
+    static final long DEFAULT_FACTORY_RESET_THROTTLE_DURATION_MIN = 10;
 
     private static final String NAME = "rescue-party-observer";
 
@@ -117,6 +117,8 @@
             "persist.device_config.configuration.disable_rescue_party";
     private static final String PROP_DISABLE_FACTORY_RESET_FLAG =
             "persist.device_config.configuration.disable_rescue_party_factory_reset";
+    private static final String PROP_THROTTLE_DURATION_MIN_FLAG =
+            "persist.device_config.configuration.rescue_party_throttle_duration_min";
 
     private static final int PERSISTENT_MASK = ApplicationInfo.FLAG_PERSISTENT
             | ApplicationInfo.FLAG_SYSTEM;
@@ -489,13 +491,14 @@
         switch(rescueLevel) {
             case LEVEL_RESET_SETTINGS_UNTRUSTED_DEFAULTS:
             case LEVEL_RESET_SETTINGS_UNTRUSTED_CHANGES:
-                return PackageHealthObserverImpact.USER_IMPACT_LOW;
+                return PackageHealthObserverImpact.USER_IMPACT_LEVEL_10;
             case LEVEL_RESET_SETTINGS_TRUSTED_DEFAULTS:
             case LEVEL_WARM_REBOOT:
+                return PackageHealthObserverImpact.USER_IMPACT_LEVEL_50;
             case LEVEL_FACTORY_RESET:
-                return PackageHealthObserverImpact.USER_IMPACT_HIGH;
+                return PackageHealthObserverImpact.USER_IMPACT_LEVEL_100;
             default:
-                return PackageHealthObserverImpact.USER_IMPACT_NONE;
+                return PackageHealthObserverImpact.USER_IMPACT_LEVEL_0;
         }
     }
 
@@ -633,7 +636,7 @@
                 return mapRescueLevelToUserImpact(getRescueLevel(mitigationCount,
                         mayPerformReboot(failedPackage)));
             } else {
-                return PackageHealthObserverImpact.USER_IMPACT_NONE;
+                return PackageHealthObserverImpact.USER_IMPACT_LEVEL_0;
             }
         }
 
@@ -677,7 +680,7 @@
         @Override
         public int onBootLoop(int mitigationCount) {
             if (isDisabled()) {
-                return PackageHealthObserverImpact.USER_IMPACT_NONE;
+                return PackageHealthObserverImpact.USER_IMPACT_LEVEL_0;
             }
             return mapRescueLevelToUserImpact(getRescueLevel(mitigationCount, true));
         }
@@ -721,7 +724,9 @@
         private boolean shouldThrottleReboot() {
             Long lastResetTime = SystemProperties.getLong(PROP_LAST_FACTORY_RESET_TIME_MS, 0);
             long now = System.currentTimeMillis();
-            return now < lastResetTime + FACTORY_RESET_THROTTLE_DURATION_MS;
+            long throttleDurationMin = SystemProperties.getLong(PROP_THROTTLE_DURATION_MIN_FLAG,
+                    DEFAULT_FACTORY_RESET_THROTTLE_DURATION_MIN);
+            return now < lastResetTime + TimeUnit.MINUTES.toMillis(throttleDurationMin);
         }
 
         private boolean isPersistentSystemApp(@NonNull String packageName) {
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 e248007..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);
@@ -1019,6 +1020,24 @@
         r.pendingStarts.add(new ServiceRecord.StartItem(r, false, r.makeNextStartId(),
                 service, neededGrants, callingUid, callingProcessName, callingPackage));
 
+        // We want to allow scheduling user-initiated jobs when the app is running a
+        // foreground service that was started in the same conditions that allows for scheduling
+        // UI jobs. More explicitly, we want to allow scheduling UI jobs when the app is running
+        // an FGS that started when the app was in the TOP or a BAL-approved state.
+        final boolean isFgs = r.isForeground || r.fgRequired;
+        if (isFgs) {
+            // As of Android UDC, the conditions required for the while-in-use permissions
+            // are the same conditions that we want, so we piggyback on that logic.
+            // Use that as a shortcut if possible to avoid having to recheck all the conditions.
+            final boolean whileInUseAllowsUiJobScheduling =
+                    ActivityManagerService.doesReasonCodeAllowSchedulingUserInitiatedJobs(
+                            r.mAllowWhileInUsePermissionInFgsReason);
+            r.updateAllowUiJobScheduling(whileInUseAllowsUiJobScheduling
+                    || mAm.canScheduleUserInitiatedJobs(callingUid, callingPid, callingPackage));
+        } else {
+            r.updateAllowUiJobScheduling(false);
+        }
+
         if (fgRequired) {
             // We are now effectively running a foreground service.
             synchronized (mAm.mProcessStats.mLock) {
@@ -2101,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.
 
@@ -2110,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.");
@@ -2153,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
@@ -2175,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;
@@ -2185,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
@@ -2195,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
@@ -2303,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.
@@ -3645,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;
@@ -7240,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;
     }
 
     /**
@@ -7334,59 +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;
         }
-        // We want to allow scheduling user-initiated jobs when the app is running a
-        // foreground service that was started in the same conditions that allows for scheduling
-        // UI jobs. More explicitly, we want to allow scheduling UI jobs when the app is running
-        // an FGS that started when the app was in the TOP or a BAL-approved state.
-        // As of Android UDC, the conditions required for the while-in-use permissions
-        // are the same conditions that we want, so we piggyback on that logic.
-        // We use that as a shortcut if possible so we don't have to recheck all the conditions.
-        final boolean isFgs = r.isForeground || r.fgRequired;
-        if (isFgs) {
-            r.updateAllowUiJobScheduling(ActivityManagerService
-                    .doesReasonCodeAllowSchedulingUserInitiatedJobs(allowWhileInUse)
-                    || mAm.canScheduleUserInitiatedJobs(
-                            callingUid, callingPid, callingPackage, true));
-        } else {
-            r.updateAllowUiJobScheduling(false);
+        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);
     }
 
@@ -7421,18 +7564,36 @@
     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) {
-            // Is the calling UID at PROCESS_STATE_TOP or above?
-            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);
+                }
             }
         }
 
         if (ret == REASON_DENIED) {
-            // Does the calling UID have any visible activity?
+            // Allow FGS while-in-use if the caller has visible activity.
+            // Here we directly check ActivityTaskManagerService, instead of checking
+            // PendingStartActivityUids in ActivityManagerService, which gives the same result.
             final boolean isCallingUidVisible = mAm.mAtmInternal.isUidForeground(callingUid);
             if (isCallingUidVisible) {
                 ret = REASON_UID_VISIBLE;
@@ -7440,7 +7601,8 @@
         }
 
         if (ret == REASON_DENIED) {
-            // Is the allow activity background start flag on?
+            // Allow FGS while-in-use if the background activity start flag is on. Because
+            // activity start can lead to FGS start in TOP state and obtain while-in-use.
             if (backgroundStartPrivileges.allowsBackgroundActivityStarts()) {
                 ret = REASON_START_ACTIVITY_FLAG;
             }
@@ -7449,6 +7611,7 @@
         if (ret == REASON_DENIED) {
             boolean isCallerSystem = false;
             final int callingAppId = UserHandle.getAppId(callingUid);
+            // Allow FGS while-in-use for a list of special UIDs.
             switch (callingAppId) {
                 case ROOT_UID:
                 case SYSTEM_UID:
@@ -7466,7 +7629,15 @@
             }
         }
 
+        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
+            // either started or finished very recently. The binding flag
+            // BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS is also allowed by the check here.
             final Integer allowedType = mAm.mProcessList.searchEachLruProcessesLOSP(false, pr -> {
                 if (pr.uid == callingUid) {
                     if (pr.getWindowProcessController().areBackgroundFgsStartsAllowed()) {
@@ -7481,6 +7652,12 @@
         }
 
         if (ret == REASON_DENIED) {
+            // Allow FGS while-in-use if the caller UID is in ActivityManagerService's
+            // mFgsWhileInUseTempAllowList. This is a temp allowlist to allow FGS while-in-use. It
+            // is used when MediaSessionService's bluetooth button or play/resume/stop commands are
+            // issued. The typical temp allowlist duration is 10 seconds.
+            // This temp allowlist mechanism can also be called by other system_server internal
+            // components such as Telephone/VOIP if they want to start a FGS and get while-in-use.
             if (mAm.mInternal.isTempAllowlistedForFgsWhileInUse(callingUid)) {
                 return REASON_TEMP_ALLOWED_WHILE_IN_USE;
             }
@@ -7488,6 +7665,8 @@
 
         if (ret == REASON_DENIED) {
             if (targetProcess != null) {
+                // Allow FGS while-in-use if the caller of the instrumentation has
+                // START_ACTIVITIES_FROM_BACKGROUND permission.
                 ActiveInstrumentation instr = targetProcess.getActiveInstrumentation();
                 if (instr != null && instr.mHasBackgroundActivityStartsPermission) {
                     ret = REASON_INSTR_BACKGROUND_ACTIVITY_PERMISSION;
@@ -7496,6 +7675,9 @@
         }
 
         if (ret == REASON_DENIED) {
+            // Allow FGS while-in-use if the caller has START_ACTIVITIES_FROM_BACKGROUND
+            // permission, because starting an activity can lead to starting FGS from the TOP state
+            // and obtain while-in-use.
             if (mAm.checkPermission(START_ACTIVITIES_FROM_BACKGROUND, callingPid, callingUid)
                     == PERMISSION_GRANTED) {
                 ret = REASON_BACKGROUND_ACTIVITY_PERMISSION;
@@ -7503,6 +7685,8 @@
         }
 
         if (ret == REASON_DENIED) {
+            // Allow FGS while-in-use if the caller is in the while-in-use allowlist. Right now
+            // AttentionService and SystemCaptionsService packageName are in this allowlist.
             if (verifyPackage(callingPackage, callingUid)) {
                 final boolean isAllowedPackage =
                         mAllowListWhileInUsePermissionInFgs.contains(callingPackage);
@@ -7517,7 +7701,7 @@
         }
 
         if (ret == REASON_DENIED) {
-            // Is the calling UID a device owner app?
+            // Allow FGS while-in-use if the caller is the device owner.
             final boolean isDeviceOwner = mAm.mInternal.isDeviceOwner(callingUid);
             if (isDeviceOwner) {
                 ret = REASON_DEVICE_OWNER;
@@ -7527,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.
@@ -8111,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 ae5dbe1..3841b6a 100644
--- a/services/core/java/com/android/server/am/ActivityManagerConstants.java
+++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java
@@ -213,7 +213,7 @@
     private static final boolean DEFAULT_USE_TIERED_CACHED_ADJ = false;
     private static final long DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME = 60 * 1000;
 
-    private static final boolean DEFAULT_USE_MODERN_TRIM = false;
+    private static final boolean DEFAULT_USE_MODERN_TRIM = true;
 
     /**
      * Same as {@link TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED}
@@ -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 b32f8c9..def2a2f 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));
             }
 
@@ -6189,8 +6193,8 @@
 
         final ProcessServiceRecord psr = pr.mServices;
         if (psr != null && psr.hasForegroundServices()) {
-            for (int s = psr.numberOfExecutingServices() - 1; s >= 0; --s) {
-                final ServiceRecord sr = psr.getExecutingServiceAt(s);
+            for (int s = psr.numberOfRunningServices() - 1; s >= 0; --s) {
+                final ServiceRecord sr = psr.getRunningServiceAt(s);
                 if (sr.isForeground && sr.mAllowUiJobScheduling) {
                     return true;
                 }
@@ -6205,12 +6209,7 @@
      * {@link android.app.job.JobInfo.Builder#setUserInitiated(boolean) user-initiated job}.
      */
     // TODO(262260570): log allow reason to an atom
-    private boolean canScheduleUserInitiatedJobs(int uid, int pid, String pkgName) {
-        return canScheduleUserInitiatedJobs(uid, pid, pkgName, false);
-    }
-
-    boolean canScheduleUserInitiatedJobs(int uid, int pid, String pkgName,
-            boolean skipWhileInUseCheck) {
+    boolean canScheduleUserInitiatedJobs(int uid, int pid, String pkgName) {
         synchronized (this) {
             final ProcessRecord processRecord;
             synchronized (mPidsSelfLocked) {
@@ -6240,7 +6239,7 @@
             // As of Android UDC, the conditions required to grant a while-in-use permission
             // covers the majority of those cases, and so we piggyback on that logic as the base.
             // Missing cases are added after.
-            if (!skipWhileInUseCheck && mServices.canAllowWhileInUsePermissionInFgsLocked(
+            if (mServices.canAllowWhileInUsePermissionInFgsLocked(
                     pid, uid, pkgName, processRecord, backgroundStartPrivileges)) {
                 return true;
             }
@@ -7316,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);
         }
@@ -13387,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");
 
@@ -16700,6 +16707,11 @@
             pw.println(String.format("Resources History for %s (%s)",
                     app.processName,
                     app.info.packageName));
+            if (app.mOptRecord.isFrozen()) {
+                pw.println("  Skipping frozen process");
+                pw.flush();
+                continue;
+            }
             pw.flush();
             try {
                 TransferPipe tp = new TransferPipe("  ");
@@ -18603,6 +18615,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/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
index e080a80..17a0d62 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -247,6 +247,10 @@
                     return runSendBroadcast(pw);
                 case "compact":
                     return runCompact(pw);
+                case "freeze":
+                    return runFreeze(pw);
+                case "unfreeze":
+                    return runUnfreeze(pw);
                 case "instrument":
                     getOutPrintWriter().println("Error: must be invoked through 'am instrument'.");
                     return -1;
@@ -1074,20 +1078,10 @@
         boolean isFullCompact = op.equals("full");
         boolean isSomeCompact = op.equals("some");
         if (isFullCompact || isSomeCompact) {
-            String processName = getNextArgRequired();
-            synchronized (mInternal.mProcLock) {
-                // Default to current user
-                int userId = mInterface.getCurrentUserId();
-                String userOpt = getNextOption();
-                if (userOpt != null && "--user".equals(userOpt)) {
-                    int inputUserId = UserHandle.parseUserArg(getNextArgRequired());
-                    if (inputUserId != UserHandle.USER_CURRENT) {
-                        userId = inputUserId;
-                    }
-                }
-                final int uid =
-                        mInternal.getPackageManagerInternal().getPackageUid(processName, 0, userId);
-                app = mInternal.getProcessRecordLocked(processName, uid);
+            app = getProcessFromShell();
+            if (app == null) {
+                getErrPrintWriter().println("Error: could not find process");
+                return -1;
             }
             pw.println("Process record found pid: " + app.mPid);
             if (isFullCompact) {
@@ -1143,6 +1137,93 @@
         return 0;
     }
 
+    @NeverCompile
+    int runFreeze(PrintWriter pw) throws RemoteException {
+        String freezerOpt = getNextOption();
+        boolean isSticky = false;
+        if (freezerOpt != null) {
+            isSticky = freezerOpt.equals("--sticky");
+        }
+        ProcessRecord app = getProcessFromShell();
+        if (app == null) {
+            getErrPrintWriter().println("Error: could not find process");
+            return -1;
+        }
+        pw.println("Freezing pid: " + app.mPid + " sticky=" + isSticky);
+        synchronized (mInternal) {
+            synchronized (mInternal.mProcLock) {
+                app.mOptRecord.setFreezeSticky(isSticky);
+                mInternal.mOomAdjuster.mCachedAppOptimizer.freezeAppAsyncInternalLSP(app, 0, true);
+            }
+        }
+        return 0;
+    }
+
+    @NeverCompile
+    int runUnfreeze(PrintWriter pw) throws RemoteException {
+        String freezerOpt = getNextOption();
+        boolean isSticky = false;
+        if (freezerOpt != null) {
+            isSticky = freezerOpt.equals("--sticky");
+        }
+        ProcessRecord app = getProcessFromShell();
+        if (app == null) {
+            getErrPrintWriter().println("Error: could not find process");
+            return -1;
+        }
+        pw.println("Unfreezing pid: " + app.mPid);
+        synchronized (mInternal) {
+            synchronized (mInternal.mProcLock) {
+                synchronized (mInternal.mOomAdjuster.mCachedAppOptimizer.mFreezerLock) {
+                    app.mOptRecord.setFreezeSticky(isSticky);
+                    mInternal.mOomAdjuster.mCachedAppOptimizer.unfreezeAppInternalLSP(app, 0,
+                            false);
+                }
+            }
+        }
+        return 0;
+    }
+
+    /**
+     * Parses from the shell the process name and user id if provided and provides the corresponding
+     * {@link ProcessRecord)} If no user is provided, it will fallback to current user.
+     * Example usage: {@code <processname> --user current} or {@code <processname>}
+     * @return process record of process, null if none found.
+     * @throws RemoteException
+     */
+    @NeverCompile
+    ProcessRecord getProcessFromShell() throws RemoteException {
+        ProcessRecord app;
+        String processName = getNextArgRequired();
+        synchronized (mInternal.mProcLock) {
+            // Default to current user
+            int userId = getUserIdFromShellOrFallback();
+            final int uid =
+                    mInternal.getPackageManagerInternal().getPackageUid(processName, 0, userId);
+            app = mInternal.getProcessRecordLocked(processName, uid);
+        }
+        return app;
+    }
+
+    /**
+     * @return User id from command line provided in the form of
+     *  {@code --user <userid|current|all>} and if the argument is not found it will fallback
+     *  to current user.
+     * @throws RemoteException
+     */
+    @NeverCompile
+    int getUserIdFromShellOrFallback() throws RemoteException {
+        int userId = mInterface.getCurrentUserId();
+        String userOpt = getNextOption();
+        if (userOpt != null && "--user".equals(userOpt)) {
+            int inputUserId = UserHandle.parseUserArg(getNextArgRequired());
+            if (inputUserId != UserHandle.USER_CURRENT) {
+                userId = inputUserId;
+            }
+        }
+        return userId;
+    }
+
     int runDumpHeap(PrintWriter pw) throws RemoteException {
         final PrintWriter err = getErrPrintWriter();
         boolean managed = true;
@@ -4061,6 +4142,14 @@
             pw.println("      Perform a native compaction for process with <pid>.");
             pw.println("      some: execute file compaction.");
             pw.println("      full: execute anon + file compaction.");
+            pw.println("  freeze [--sticky] <processname> [--user <USER_ID>]");
+            pw.println("      Freeze a process.");
+            pw.println("        --sticky: persists the frozen state for the process lifetime or");
+            pw.println("                  until an unfreeze is triggered via shell");
+            pw.println("  unfreeze [--sticky] <processname> [--user <USER_ID>]");
+            pw.println("      Unfreeze a process.");
+            pw.println("        --sticky: persists the unfrozen state for the process lifetime or");
+            pw.println("                  until a freeze is triggered via shell");
             pw.println("  instrument [-r] [-e <NAME> <VALUE>] [-p <FILE>] [-w]");
             pw.println("          [--user <USER_ID> | current]");
             pw.println("          [--no-hidden-api-checks [--no-test-api-access]]");
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 ed297d0..d140403 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -23,6 +23,7 @@
 import static android.Manifest.permission.POWER_SAVER;
 import static android.Manifest.permission.UPDATE_DEVICE_STATS;
 import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED;
+import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
 import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
 import static android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK;
 import static android.os.BatteryStats.POWER_DATA_UNAVAILABLE;
@@ -37,6 +38,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;
@@ -49,6 +52,7 @@
 import android.os.BatteryManagerInternal;
 import android.os.BatteryStats;
 import android.os.BatteryStatsInternal;
+import android.os.BatteryStatsInternal.CpuWakeupSubsystem;
 import android.os.BatteryUsageStats;
 import android.os.BatteryUsageStatsQuery;
 import android.os.Binder;
@@ -108,8 +112,8 @@
 import com.android.server.power.stats.BatteryStatsImpl;
 import com.android.server.power.stats.BatteryUsageStatsProvider;
 import com.android.server.power.stats.BatteryUsageStatsStore;
-import com.android.server.power.stats.CpuWakeupStats;
 import com.android.server.power.stats.SystemServerCpuThreadReader.SystemServiceCpuThreadTimes;
+import com.android.server.power.stats.wakeups.CpuWakeupStats;
 
 import java.io.File;
 import java.io.FileDescriptor;
@@ -149,7 +153,6 @@
 
     private final PowerProfile mPowerProfile;
     final BatteryStatsImpl mStats;
-    @GuardedBy("mWakeupStats")
     final CpuWakeupStats mCpuWakeupStats;
     private final BatteryUsageStatsStore mBatteryUsageStatsStore;
     private final BatteryStatsImpl.UserInfoProvider mUserManagerUserInfoProvider;
@@ -473,6 +476,8 @@
         private int transportToSubsystem(NetworkCapabilities nc) {
             if (nc.hasTransport(TRANSPORT_WIFI)) {
                 return CPU_WAKEUP_SUBSYSTEM_WIFI;
+            } else if (nc.hasTransport(TRANSPORT_CELLULAR)) {
+                return CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA;
             }
             return CPU_WAKEUP_SUBSYSTEM_UNKNOWN;
         }
@@ -513,18 +518,34 @@
         }
 
         @Override
-        public void noteCpuWakingActivity(int subsystem, long elapsedMillis, int... uids) {
-            Objects.requireNonNull(uids);
-            mCpuWakeupStats.noteWakingActivity(subsystem, elapsedMillis, uids);
+        public void noteWakingSoundTrigger(long elapsedMillis, int uid) {
+            noteCpuWakingActivity(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER, elapsedMillis, uid);
         }
 
         @Override
-        public void noteWakingSoundTrigger(long elapsedMillis, int uid) {
-            // TODO(b/267717665): Pipe to noteCpuWakingActivity once SoundTrigger starts using this.
-            Slog.w(TAG, "Sound trigger event dispatched to uid " + uid);
+        public void noteWakingAlarmBatch(long elapsedMillis, int... uids) {
+            noteCpuWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, elapsedMillis, uids);
         }
     }
 
+    /**
+     * Reports any activity that could potentially have caused the CPU to wake up.
+     * Accepts a timestamp to allow free ordering between the event and its reporting.
+     *
+     * <p>
+     * This method can be called multiple times for the same wakeup and then all attribution
+     * reported will be unioned as long as all reports are made within a small amount of cpu uptime
+     * after the wakeup is reported to batterystats.
+     *
+     * @param subsystem The subsystem this activity should be attributed to.
+     * @param elapsedMillis The time when this activity happened in the elapsed timebase.
+     * @param uids The uid (or uids) that should be blamed for this activity.
+     */
+    void noteCpuWakingActivity(@CpuWakeupSubsystem int subsystem, long elapsedMillis, int... uids) {
+        Objects.requireNonNull(uids);
+        mHandler.post(() -> mCpuWakeupStats.noteWakingActivity(subsystem, elapsedMillis, uids));
+    }
+
     @Override
     public void monitor() {
         if (!mMonitorEnabled) {
@@ -1263,6 +1284,29 @@
     }
 
     @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 long elapsedMillis = TimeUnit.NANOSECONDS.toMillis(elapsedNanos);
+
+        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;
+        }
+        if (uid < 0) {
+            Slog.wtf(TAG, "Invalid uid " + uid + " for sensor event with sensor: " + sensor);
+            return;
+        }
+        // TODO (b/278319756): Also pipe in Sensor type for more usefulness.
+        noteCpuWakingActivity(BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_SENSOR, elapsedMillis, uid);
+    }
+
+    @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/BroadcastProcessQueue.java b/services/core/java/com/android/server/am/BroadcastProcessQueue.java
index 9e61ce4..0767218 100644
--- a/services/core/java/com/android/server/am/BroadcastProcessQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastProcessQueue.java
@@ -20,6 +20,7 @@
 import static com.android.server.am.BroadcastRecord.deliveryStateToString;
 import static com.android.server.am.BroadcastRecord.isReceiverEquals;
 
+import android.annotation.CheckResult;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -187,6 +188,12 @@
     private @Reason int mRunnableAtReason = REASON_EMPTY;
     private boolean mRunnableAtInvalidated;
 
+    /**
+     * Last state applied by {@link #updateDeferredStates}, used to quickly
+     * determine if a state transition is occurring.
+     */
+    private boolean mLastDeferredStates;
+
     private boolean mUidCached;
     private boolean mProcessInstrumented;
     private boolean mProcessPersistent;
@@ -235,7 +242,15 @@
      */
     @Nullable
     public BroadcastRecord enqueueOrReplaceBroadcast(@NonNull BroadcastRecord record,
-            int recordIndex, boolean wouldBeSkipped) {
+            int recordIndex, boolean wouldBeSkipped,
+            @NonNull BroadcastConsumer deferredStatesApplyConsumer) {
+        // When updateDeferredStates() has already applied a deferred state to
+        // all pending items, apply to this new broadcast too
+        if (mLastDeferredStates && record.deferUntilActive
+                && (record.getDeliveryState(recordIndex) == BroadcastRecord.DELIVERY_PENDING)) {
+            deferredStatesApplyConsumer.accept(record, recordIndex);
+        }
+
         if (record.isReplacePending()) {
             final BroadcastRecord replacedBroadcastRecord = replaceBroadcast(record, recordIndex,
                     wouldBeSkipped);
@@ -340,7 +355,12 @@
      * Predicates that choose to remove a broadcast <em>must</em> finish
      * delivery of the matched broadcast, to ensure that situations like ordered
      * broadcasts are handled consistently.
+     *
+     * @return if this operation may have changed internal state, indicating
+     *         that the caller is responsible for invoking
+     *         {@link BroadcastQueueModernImpl#updateRunnableList}
      */
+    @CheckResult
     public boolean forEachMatchingBroadcast(@NonNull BroadcastPredicate predicate,
             @NonNull BroadcastConsumer consumer, boolean andRemove) {
         boolean didSomething = false;
@@ -353,6 +373,7 @@
         return didSomething;
     }
 
+    @CheckResult
     private boolean forEachMatchingBroadcastInQueue(@NonNull ArrayDeque<SomeArgs> queue,
             @NonNull BroadcastPredicate predicate, @NonNull BroadcastConsumer consumer,
             boolean andRemove) {
@@ -369,6 +390,10 @@
                     args.recycle();
                     it.remove();
                     onBroadcastDequeued(record, recordIndex, recordWouldBeSkipped);
+                } else {
+                    // Even if we're leaving broadcast in queue, it may have
+                    // been mutated in such a way to change our runnable time
+                    invalidateRunnableAt();
                 }
                 didSomething = true;
             }
@@ -380,32 +405,44 @@
 
     /**
      * Update the actively running "warm" process for this process.
+     *
+     * @return if this operation may have changed internal state, indicating
+     *         that the caller is responsible for invoking
+     *         {@link BroadcastQueueModernImpl#updateRunnableList}
      */
-    public void setProcessAndUidCached(@Nullable ProcessRecord app, boolean uidCached) {
+    @CheckResult
+    public boolean setProcessAndUidCached(@Nullable ProcessRecord app, boolean uidCached) {
         this.app = app;
-        if (app != null) {
-            setUidCached(uidCached);
-            setProcessInstrumented(app.getActiveInstrumentation() != null);
-            setProcessPersistent(app.isPersistent());
-        } else {
-            setUidCached(uidCached);
-            setProcessInstrumented(false);
-            setProcessPersistent(false);
-        }
 
         // Since we may have just changed our PID, invalidate cached strings
         mCachedToString = null;
         mCachedToShortString = null;
+
+        boolean didSomething = false;
+        if (app != null) {
+            didSomething |= setUidCached(uidCached);
+            didSomething |= setProcessInstrumented(app.getActiveInstrumentation() != null);
+            didSomething |= setProcessPersistent(app.isPersistent());
+        } else {
+            didSomething |= setUidCached(uidCached);
+            didSomething |= setProcessInstrumented(false);
+            didSomething |= setProcessPersistent(false);
+        }
+        return didSomething;
     }
 
     /**
      * Update if this process is in the "cached" state, typically signaling that
      * broadcast dispatch should be paused or delayed.
      */
-    private void setUidCached(boolean uidCached) {
+    @CheckResult
+    private boolean setUidCached(boolean uidCached) {
         if (mUidCached != uidCached) {
             mUidCached = uidCached;
             invalidateRunnableAt();
+            return true;
+        } else {
+            return false;
         }
     }
 
@@ -414,10 +451,14 @@
      * signaling that broadcast dispatch should bypass all pauses or delays, to
      * avoid holding up test suites.
      */
-    private void setProcessInstrumented(boolean instrumented) {
+    @CheckResult
+    private boolean setProcessInstrumented(boolean instrumented) {
         if (mProcessInstrumented != instrumented) {
             mProcessInstrumented = instrumented;
             invalidateRunnableAt();
+            return true;
+        } else {
+            return false;
         }
     }
 
@@ -425,10 +466,14 @@
      * Update if this process is in the "persistent" state, which signals broadcast dispatch should
      * bypass all pauses or delays to prevent the system from becoming out of sync with itself.
      */
-    private void setProcessPersistent(boolean persistent) {
+    @CheckResult
+    private boolean setProcessPersistent(boolean persistent) {
         if (mProcessPersistent != persistent) {
             mProcessPersistent = persistent;
             invalidateRunnableAt();
+            return true;
+        } else {
+            return false;
         }
     }
 
@@ -648,8 +693,20 @@
         return mActive != null;
     }
 
-    void forceDelayBroadcastDelivery(long delayedDurationMs) {
-        mForcedDelayedDurationMs = delayedDurationMs;
+    /**
+     * @return if this operation may have changed internal state, indicating
+     *         that the caller is responsible for invoking
+     *         {@link BroadcastQueueModernImpl#updateRunnableList}
+     */
+    @CheckResult
+    boolean forceDelayBroadcastDelivery(long delayedDurationMs) {
+        if (mForcedDelayedDurationMs != delayedDurationMs) {
+            mForcedDelayedDurationMs = delayedDurationMs;
+            invalidateRunnableAt();
+            return true;
+        } else {
+            return false;
+        }
     }
 
     /**
@@ -721,10 +778,21 @@
      * broadcasts would be prioritized for dispatching, even if there are urgent broadcasts
      * waiting. This is typically used in case there are callers waiting for "barrier" to be
      * reached.
+     *
+     * @return if this operation may have changed internal state, indicating
+     *         that the caller is responsible for invoking
+     *         {@link BroadcastQueueModernImpl#updateRunnableList}
      */
+    @CheckResult
     @VisibleForTesting
-    void setPrioritizeEarliest(boolean prioritizeEarliest) {
-        mPrioritizeEarliest = prioritizeEarliest;
+    boolean setPrioritizeEarliest(boolean prioritizeEarliest) {
+        if (mPrioritizeEarliest != prioritizeEarliest) {
+            mPrioritizeEarliest = prioritizeEarliest;
+            invalidateRunnableAt();
+            return true;
+        } else {
+            return false;
+        }
     }
 
     /**
@@ -912,9 +980,9 @@
     }
 
     /**
-     * Update {@link #getRunnableAt()} if it's currently invalidated.
+     * Update {@link #getRunnableAt()}, when needed.
      */
-    private void updateRunnableAt() {
+    void updateRunnableAt() {
         if (!mRunnableAtInvalidated) return;
         mRunnableAtInvalidated = false;
 
@@ -1027,10 +1095,44 @@
     }
 
     /**
+     * Update {@link BroadcastRecord.DELIVERY_DEFERRED} states of all our
+     * pending broadcasts, when needed.
+     */
+    void updateDeferredStates(@NonNull BroadcastConsumer applyConsumer,
+            @NonNull BroadcastConsumer clearConsumer) {
+        // When all we have pending is deferred broadcasts, and we're cached,
+        // then we want everything to be marked deferred
+        final boolean wantDeferredStates = (mCountDeferred > 0)
+                && (mCountDeferred == mCountEnqueued) && mUidCached;
+
+        if (mLastDeferredStates != wantDeferredStates) {
+            mLastDeferredStates = wantDeferredStates;
+            if (wantDeferredStates) {
+                forEachMatchingBroadcast((r, i) -> {
+                    return r.deferUntilActive
+                            && (r.getDeliveryState(i) == BroadcastRecord.DELIVERY_PENDING);
+                }, applyConsumer, false);
+            } else {
+                forEachMatchingBroadcast((r, i) -> {
+                    return r.deferUntilActive
+                            && (r.getDeliveryState(i) == BroadcastRecord.DELIVERY_DEFERRED);
+                }, clearConsumer, false);
+            }
+        }
+    }
+
+    /**
      * Check overall health, confirming things are in a reasonable state and
      * that we're not wedged.
      */
     public void assertHealthLocked() {
+        // If we're not actively running, we should be sorted into the runnable
+        // list, and if we're invalidated then someone likely forgot to invoke
+        // updateRunnableList() to re-sort us into place
+        if (!isActive()) {
+            checkState(!mRunnableAtInvalidated, "mRunnableAtInvalidated");
+        }
+
         assertHealthLocked(mPending);
         assertHealthLocked(mPendingUrgent);
         assertHealthLocked(mPendingOffload);
@@ -1133,19 +1235,30 @@
         return mCachedToShortString;
     }
 
+    public String describeStateLocked() {
+        return describeStateLocked(SystemClock.uptimeMillis());
+    }
+
+    public String describeStateLocked(@UptimeMillisLong long now) {
+        final StringBuilder sb = new StringBuilder();
+        if (isRunnable()) {
+            sb.append("runnable at ");
+            TimeUtils.formatDuration(getRunnableAt(), now, sb);
+        } else {
+            sb.append("not runnable");
+        }
+        sb.append(" because ");
+        sb.append(reasonToString(mRunnableAtReason));
+        return sb.toString();
+    }
+
     @NeverCompile
     public void dumpLocked(@UptimeMillisLong long now, @NonNull IndentingPrintWriter pw) {
         if ((mActive == null) && isEmpty()) return;
 
         pw.print(toShortString());
-        if (isRunnable()) {
-            pw.print(" runnable at ");
-            TimeUtils.formatDuration(getRunnableAt(), now, pw);
-        } else {
-            pw.print(" not runnable");
-        }
-        pw.print(" because ");
-        pw.print(reasonToString(mRunnableAtReason));
+        pw.print(" ");
+        pw.print(describeStateLocked(now));
         pw.println();
 
         pw.increaseIndent();
diff --git a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
index e532c15..8735f8a 100644
--- a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
+++ b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
@@ -327,6 +327,12 @@
             return;
         }
 
+        // To place ourselves correctly in the runnable list, we may need to
+        // update internals that may have been invalidated; we wait until now at
+        // the last possible moment to avoid duplicated work
+        queue.updateDeferredStates(mBroadcastConsumerDeferApply, mBroadcastConsumerDeferClear);
+        queue.updateRunnableAt();
+
         final boolean wantQueue = queue.isRunnable();
         final boolean inQueue = (queue == mRunnableHead) || (queue.runnableAtPrev != null)
                 || (queue.runnableAtNext != null);
@@ -352,8 +358,6 @@
         // If app isn't running, and there's nothing in the queue, clean up
         if (queue.isEmpty() && !queue.isActive() && !queue.isProcessWarm()) {
             removeProcessQueue(queue.processName, queue.uid);
-        } else {
-            updateQueueDeferred(queue);
         }
     }
 
@@ -619,14 +623,10 @@
             }
             enqueuedBroadcast = true;
             final BroadcastRecord replacedBroadcast = queue.enqueueOrReplaceBroadcast(
-                    r, i, wouldBeSkipped);
+                    r, i, wouldBeSkipped, mBroadcastConsumerDeferApply);
             if (replacedBroadcast != null) {
                 replacedBroadcasts.add(replacedBroadcast);
             }
-            if (r.isDeferUntilActive() && queue.isDeferredUntilActive()) {
-                setDeliveryState(queue, null, r, i, receiver, BroadcastRecord.DELIVERY_DEFERRED,
-                        "deferred at enqueue time");
-            }
             updateRunnableList(queue);
             enqueueUpdateRunningList();
         }
@@ -1249,14 +1249,14 @@
         r.resultExtras = null;
     };
 
-    private final BroadcastConsumer mBroadcastConsumerDefer = (r, i) -> {
+    private final BroadcastConsumer mBroadcastConsumerDeferApply = (r, i) -> {
         setDeliveryState(null, null, r, i, r.receivers.get(i), BroadcastRecord.DELIVERY_DEFERRED,
-                "mBroadcastConsumerDefer");
+                "mBroadcastConsumerDeferApply");
     };
 
-    private final BroadcastConsumer mBroadcastConsumerUndoDefer = (r, i) -> {
+    private final BroadcastConsumer mBroadcastConsumerDeferClear = (r, i) -> {
         setDeliveryState(null, null, r, i, r.receivers.get(i), BroadcastRecord.DELIVERY_PENDING,
-                "mBroadcastConsumerUndoDefer");
+                "mBroadcastConsumerDeferClear");
     };
 
     /**
@@ -1272,7 +1272,8 @@
                     final long now = SystemClock.uptimeMillis();
                     if (now > mLastTestFailureTime + DateUtils.SECOND_IN_MILLIS) {
                         mLastTestFailureTime = now;
-                        pw.println("Test " + label + " failed due to " + leaf.toShortString());
+                        pw.println("Test " + label + " failed due to " + leaf.toShortString() + " "
+                                + leaf.describeStateLocked());
                         pw.flush();
                     }
                     return false;
@@ -1309,34 +1310,25 @@
         return didSomething;
     }
 
-    private void forEachMatchingQueue(
+    private boolean forEachMatchingQueue(
             @NonNull Predicate<BroadcastProcessQueue> queuePredicate,
             @NonNull Consumer<BroadcastProcessQueue> queueConsumer) {
+        boolean didSomething = false;
         for (int i = mProcessQueues.size() - 1; i >= 0; i--) {
             BroadcastProcessQueue leaf = mProcessQueues.valueAt(i);
             while (leaf != null) {
                 if (queuePredicate.test(leaf)) {
                     queueConsumer.accept(leaf);
                     updateRunnableList(leaf);
+                    didSomething = true;
                 }
                 leaf = leaf.processNameNext;
             }
         }
-    }
-
-    private void updateQueueDeferred(
-            @NonNull BroadcastProcessQueue leaf) {
-        if (leaf.isDeferredUntilActive()) {
-            leaf.forEachMatchingBroadcast((r, i) -> {
-                return r.deferUntilActive && (r.getDeliveryState(i)
-                        == BroadcastRecord.DELIVERY_PENDING);
-            }, mBroadcastConsumerDefer, false);
-        } else if (leaf.hasDeferredBroadcasts()) {
-            leaf.forEachMatchingBroadcast((r, i) -> {
-                return r.deferUntilActive && (r.getDeliveryState(i)
-                        == BroadcastRecord.DELIVERY_DEFERRED);
-            }, mBroadcastConsumerUndoDefer, false);
+        if (didSomething) {
+            enqueueUpdateRunningList();
         }
+        return didSomething;
     }
 
     @Override
@@ -1359,8 +1351,6 @@
                         // Update internal state by refreshing values previously
                         // read from any known running process
                         setQueueProcess(leaf, leaf.app);
-                        updateQueueDeferred(leaf);
-                        updateRunnableList(leaf);
                         leaf = leaf.processNameNext;
                     }
                     enqueueUpdateRunningList();
@@ -1529,19 +1519,31 @@
         }
     }
 
+    @SuppressWarnings("CheckResult")
     private void updateWarmProcess(@NonNull BroadcastProcessQueue queue) {
         if (!queue.isProcessWarm()) {
-            setQueueProcess(queue, mService.getProcessRecordLocked(queue.processName, queue.uid));
+            // This is a bit awkward; we're in the middle of traversing the
+            // runnable queue, so we can't reorder that list if the runnable
+            // time changes here. However, if this process was just found to be
+            // warm via this operation, we're going to immediately promote it to
+            // be running, and any side effect of this operation will then apply
+            // after it's finished and is returned to the runnable list.
+            queue.setProcessAndUidCached(
+                    mService.getProcessRecordLocked(queue.processName, queue.uid),
+                    mUidCached.get(queue.uid, false));
         }
     }
 
     /**
      * Update the {@link ProcessRecord} associated with the given
-     * {@link BroadcastProcessQueue}.
+     * {@link BroadcastProcessQueue}. Also updates any runnable status that
+     * might have changed as a side-effect.
      */
     private void setQueueProcess(@NonNull BroadcastProcessQueue queue,
             @Nullable ProcessRecord app) {
-        queue.setProcessAndUidCached(app, mUidCached.get(queue.uid, false));
+        if (queue.setProcessAndUidCached(app, mUidCached.get(queue.uid, false))) {
+            updateRunnableList(queue);
+        }
     }
 
     /**
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index f42087f..1426cfd 100644
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -342,7 +342,7 @@
 
     private final ActivityManagerGlobalLock mProcLock;
 
-    private final Object mFreezerLock = new Object();
+    public final Object mFreezerLock = new Object();
 
     private final OnPropertiesChangedListener mOnFlagsChangedListener =
             new OnPropertiesChangedListener() {
@@ -763,8 +763,9 @@
                 pw.println("  Apps frozen: " + size);
                 for (int i = 0; i < size; i++) {
                     ProcessRecord app = mFrozenProcesses.valueAt(i);
-                    pw.println("    " + app.mOptRecord.getFreezeUnfreezeTime()
-                            + ": " + app.getPid() + " " + app.processName);
+                    pw.println("    " + app.mOptRecord.getFreezeUnfreezeTime() + ": " + app.getPid()
+                            + " " + app.processName
+                            + (app.mOptRecord.isFreezeSticky() ? " (sticky)" : ""));
                 }
 
                 if (!mPendingCompactionProcesses.isEmpty()) {
@@ -1283,12 +1284,26 @@
 
     @GuardedBy({"mAm", "mProcLock"})
     void freezeAppAsyncLSP(ProcessRecord app) {
+        freezeAppAsyncInternalLSP(app, mFreezerDebounceTimeout, false);
+    }
+
+    @GuardedBy({"mAm", "mProcLock"})
+    void freezeAppAsyncInternalLSP(ProcessRecord app, long delayMillis, boolean force) {
         final ProcessCachedOptimizerRecord opt = app.mOptRecord;
         if (opt.isPendingFreeze()) {
             // Skip redundant DO_FREEZE message
             return;
         }
 
+        if (opt.isFreezeSticky() && !force) {
+            if (DEBUG_FREEZER) {
+                Slog.d(TAG_AM,
+                        "Skip freezing because unfrozen state is sticky pid=" + app.getPid() + " "
+                                + app.processName);
+            }
+            return;
+        }
+
         if (mAm.mConstants.USE_MODERN_TRIM
                 && app.mState.getSetAdj() >= ProcessList.CACHED_APP_MIN_ADJ) {
             final IApplicationThread thread = app.getThread();
@@ -1301,9 +1316,8 @@
             }
         }
         mFreezeHandler.sendMessageDelayed(
-                mFreezeHandler.obtainMessage(
-                    SET_FROZEN_PROCESS_MSG, DO_FREEZE, 0, app),
-                mFreezerDebounceTimeout);
+                mFreezeHandler.obtainMessage(SET_FROZEN_PROCESS_MSG, DO_FREEZE, 0, app),
+                delayMillis);
         opt.setPendingFreeze(true);
         if (DEBUG_FREEZER) {
             Slog.d(TAG_AM, "Async freezing " + app.getPid() + " " + app.processName);
@@ -1311,9 +1325,19 @@
     }
 
     @GuardedBy({"mAm", "mProcLock", "mFreezerLock"})
-    void unfreezeAppInternalLSP(ProcessRecord app, @UnfreezeReason int reason) {
+    void unfreezeAppInternalLSP(ProcessRecord app, @UnfreezeReason int reason, boolean force) {
         final int pid = app.getPid();
         final ProcessCachedOptimizerRecord opt = app.mOptRecord;
+        boolean sticky = opt.isFreezeSticky();
+        if (sticky && !force) {
+            // Sticky freezes will not change their state unless forced out of it.
+            if (DEBUG_FREEZER) {
+                Slog.d(TAG_AM,
+                        "Skip unfreezing because frozen state is sticky pid=" + pid + " "
+                                + app.processName);
+            }
+            return;
+        }
         if (opt.isPendingFreeze()) {
             // Remove pending DO_FREEZE message
             mFreezeHandler.removeMessages(SET_FROZEN_PROCESS_MSG, app);
@@ -1326,8 +1350,7 @@
         UidRecord uidRec = app.getUidRecord();
         if (uidRec != null && uidRec.isFrozen()) {
             uidRec.setFrozen(false);
-            mFreezeHandler.removeMessages(UID_FROZEN_STATE_CHANGED_MSG, app);
-            reportOneUidFrozenStateChanged(app.uid, false);
+            postUidFrozenMessage(uidRec.getUid(), false);
         }
 
         opt.setFreezerOverride(false);
@@ -1407,7 +1430,7 @@
     @GuardedBy({"mAm", "mProcLock"})
     void unfreezeAppLSP(ProcessRecord app, @UnfreezeReason int reason) {
         synchronized (mFreezerLock) {
-            unfreezeAppInternalLSP(app, reason);
+            unfreezeAppInternalLSP(app, reason, false);
         }
     }
 
@@ -1468,8 +1491,7 @@
             UidRecord uidRec = app.getUidRecord();
             if (uidRec != null && uidRec.isFrozen()) {
                 uidRec.setFrozen(false);
-                mFreezeHandler.removeMessages(UID_FROZEN_STATE_CHANGED_MSG, app);
-                reportOneUidFrozenStateChanged(app.uid, false);
+                postUidFrozenMessage(uidRec.getUid(), false);
             }
 
             mFrozenProcesses.delete(app.getPid());
@@ -1998,6 +2020,15 @@
         mAm.reportUidFrozenStateChanged(uids, frozenStates);
     }
 
+    private void postUidFrozenMessage(int uid, boolean frozen) {
+        final Integer uidObj = Integer.valueOf(uid);
+        mFreezeHandler.removeEqualMessages(UID_FROZEN_STATE_CHANGED_MSG, uidObj);
+
+        final int op = frozen ? 1 : 0;
+        mFreezeHandler.sendMessage(mFreezeHandler.obtainMessage(UID_FROZEN_STATE_CHANGED_MSG, op,
+                0, uidObj));
+    }
+
     private final class FreezeHandler extends Handler implements
             ProcLocksReader.ProcLocksReaderCallback {
         private FreezeHandler() {
@@ -2028,7 +2059,9 @@
                     reportUnfreeze(pid, frozenDuration, processName, reason);
                     break;
                 case UID_FROZEN_STATE_CHANGED_MSG:
-                    reportOneUidFrozenStateChanged(((ProcessRecord) msg.obj).uid, true);
+                    final boolean frozen = (msg.arg1 == 1);
+                    final int uid = (int) msg.obj;
+                    reportOneUidFrozenStateChanged(uid, frozen);
                     break;
                 case DEADLOCK_WATCHDOG_MSG:
                     try {
@@ -2071,15 +2104,6 @@
 
             synchronized (mProcLock) {
                 pid = proc.getPid();
-                if (proc.mState.getCurAdj() < ProcessList.CACHED_APP_MIN_ADJ
-                        || opt.shouldNotFreeze()) {
-                    if (DEBUG_FREEZER) {
-                        Slog.d(TAG_AM, "Skipping freeze for process " + pid
-                                + " " + name + " curAdj = " + proc.mState.getCurAdj()
-                                + ", shouldNotFreeze = " + opt.shouldNotFreeze());
-                    }
-                    return;
-                }
 
                 if (mFreezerOverride) {
                     opt.setFreezerOverride(true);
@@ -2139,8 +2163,8 @@
                 final UidRecord uidRec = proc.getUidRecord();
                 if (frozen && uidRec != null && uidRec.areAllProcessesFrozen()) {
                     uidRec.setFrozen(true);
-                    mFreezeHandler.sendMessage(mFreezeHandler.obtainMessage(
-                            UID_FROZEN_STATE_CHANGED_MSG, proc));
+
+                    postUidFrozenMessage(uidRec.getUid(), true);
                 }
             }
 
diff --git a/services/core/java/com/android/server/am/DropboxRateLimiter.java b/services/core/java/com/android/server/am/DropboxRateLimiter.java
index 9ff2cd0..727d4df9 100644
--- a/services/core/java/com/android/server/am/DropboxRateLimiter.java
+++ b/services/core/java/com/android/server/am/DropboxRateLimiter.java
@@ -22,7 +22,7 @@
 import android.util.Slog;
 
 import com.android.internal.annotations.GuardedBy;
-import com.android.internal.expresslog.Counter;
+import com.android.modules.expresslog.Counter;
 
 /** Rate limiter for adding errors into dropbox. */
 public class DropboxRateLimiter {
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/ProcessCachedOptimizerRecord.java b/services/core/java/com/android/server/am/ProcessCachedOptimizerRecord.java
index f233107..e8c8f6d 100644
--- a/services/core/java/com/android/server/am/ProcessCachedOptimizerRecord.java
+++ b/services/core/java/com/android/server/am/ProcessCachedOptimizerRecord.java
@@ -75,6 +75,15 @@
     private boolean mFrozen;
 
     /**
+     * If set to true it will make the (un)freeze decision sticky which means that the freezer
+     * decision will remain the same unless a freeze is forced via {@link #mForceFreezeOps}.
+     * This property is usually set to true when external user wants to maintain a (un)frozen state
+     * after being applied.
+     */
+    @GuardedBy("mProcLock")
+    private boolean mFreezeSticky;
+
+    /**
      * Set to false after the process has been frozen.
      * Set to true after we have collected PSS for the frozen process.
      */
@@ -195,6 +204,15 @@
     void setFrozen(boolean frozen) {
         mFrozen = frozen;
     }
+    @GuardedBy("mProcLock")
+    void setFreezeSticky(boolean sticky) {
+        mFreezeSticky = sticky;
+    }
+
+    @GuardedBy("mProcLock")
+    boolean isFreezeSticky() {
+        return mFreezeSticky;
+    }
 
     boolean skipPSSCollectionBecauseFrozen() {
         boolean collected = mHasCollectedFrozenPSS;
diff --git a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
index 70a696c..e498384 100644
--- a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
+++ b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
@@ -51,7 +51,7 @@
 import com.android.internal.annotations.CompositeRWLock;
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.expresslog.Counter;
+import com.android.modules.expresslog.Counter;
 import com.android.internal.os.ProcessCpuTracker;
 import com.android.internal.os.TimeoutRecord;
 import com.android.internal.os.anr.AnrLatencyTracker;
@@ -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 7aae4d5..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;
@@ -579,7 +580,9 @@
         processName = _processName;
         sdkSandboxClientAppPackage = _sdkSandboxClientAppPackage;
         if (isSdkSandbox) {
-            sdkSandboxClientAppVolumeUuid = getClientInfoForSdkSandbox().volumeUuid;
+            final ApplicationInfo clientInfo = getClientInfoForSdkSandbox();
+            sdkSandboxClientAppVolumeUuid = clientInfo != null
+                    ? clientInfo.volumeUuid : null;
         } else {
             sdkSandboxClientAppVolumeUuid = null;
         }
@@ -1184,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 edf0dbd..78aafeb 100644
--- a/services/core/java/com/android/server/am/ServiceRecord.java
+++ b/services/core/java/com/android/server/am/ServiceRecord.java
@@ -174,6 +174,15 @@
     // allow while-in-use permissions in foreground service or not.
     // while-in-use permissions in FGS started from background might be restricted.
     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. */
@@ -214,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;
@@ -607,8 +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);
@@ -620,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/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index d926c2c..a181402 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -141,6 +141,7 @@
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Consumer;
 
 /**
  * Helper class for {@link ActivityManagerService} responsible for multi-user functionality.
@@ -157,7 +158,7 @@
     private static final String TAG = TAG_WITH_CLASS_NAME ? "UserController" : TAG_AM;
 
     // Amount of time we wait for observers to handle a user switch before
-    // giving up on them and unfreezing the screen.
+    // giving up on them and dismissing the user switching dialog.
     static final int DEFAULT_USER_SWITCH_TIMEOUT_MS = 3 * 1000;
 
     /**
@@ -207,7 +208,7 @@
     /**
      * Amount of time waited for {@link WindowManagerService#dismissKeyguard} callbacks to be
      * called after dismissing the keyguard.
-     * Otherwise, we should move on to unfreeze the screen {@link #unfreezeScreen}
+     * Otherwise, we should move on to dismiss the dialog {@link #dismissUserSwitchDialog()}
      * and report user switch is complete {@link #REPORT_USER_SWITCH_COMPLETE_MSG}.
      */
     private static final int DISMISS_KEYGUARD_TIMEOUT_MS = 2 * 1000;
@@ -1695,14 +1696,6 @@
                 return false;
             }
 
-            if (foreground && isUserSwitchUiEnabled()) {
-                t.traceBegin("startFreezingScreen");
-                mInjector.getWindowManager().startFreezingScreen(
-                        R.anim.screen_user_exit, R.anim.screen_user_enter);
-                t.traceEnd();
-            }
-            dismissUserSwitchDialog(); // so that we don't hold a reference to mUserSwitchingDialog
-
             boolean needStart = false;
             boolean updateUmState = false;
             UserState uss;
@@ -1877,7 +1870,7 @@
         if (!success) {
             mInjector.getWindowManager().setSwitchingUser(false);
             mTargetUserId = UserHandle.USER_NULL;
-            dismissUserSwitchDialog();
+            dismissUserSwitchDialog(null);
         }
     }
 
@@ -2015,22 +2008,26 @@
             mUiHandler.sendMessage(mUiHandler.obtainMessage(
                     START_USER_SWITCH_UI_MSG, userNames));
         } else {
-            mHandler.removeMessages(START_USER_SWITCH_FG_MSG);
-            mHandler.sendMessage(mHandler.obtainMessage(
-                    START_USER_SWITCH_FG_MSG, targetUserId, 0));
+            sendStartUserSwitchFgMessage(targetUserId);
         }
         return true;
     }
 
-    private void dismissUserSwitchDialog() {
-        mInjector.dismissUserSwitchingDialog();
+    private void sendStartUserSwitchFgMessage(int targetUserId) {
+        mHandler.removeMessages(START_USER_SWITCH_FG_MSG);
+        mHandler.sendMessage(mHandler.obtainMessage(START_USER_SWITCH_FG_MSG, targetUserId, 0));
+    }
+
+    private void dismissUserSwitchDialog(Runnable onDismissed) {
+        mInjector.dismissUserSwitchingDialog(onDismissed);
     }
 
     private void showUserSwitchDialog(Pair<UserInfo, UserInfo> fromToUserPair) {
         // The dialog will show and then initiate the user switch by calling startUserInForeground
         mInjector.showUserSwitchingDialog(fromToUserPair.first, fromToUserPair.second,
                 getSwitchingFromSystemUserMessageUnchecked(),
-                getSwitchingToSystemUserMessageUnchecked());
+                getSwitchingToSystemUserMessageUnchecked(),
+                /* onShown= */ () -> sendStartUserSwitchFgMessage(fromToUserPair.second.id));
     }
 
     private void dispatchForegroundProfileChanged(@UserIdInt int userId) {
@@ -2236,7 +2233,7 @@
 
         EventLog.writeEvent(EventLogTags.UC_CONTINUE_USER_SWITCH, oldUserId, newUserId);
 
-        // Do the keyguard dismiss and unfreeze later
+        // Do the keyguard dismiss and dismiss the user switching dialog later
         mHandler.removeMessages(COMPLETE_USER_SWITCH_MSG);
         mHandler.sendMessage(mHandler.obtainMessage(
                 COMPLETE_USER_SWITCH_MSG, oldUserId, newUserId));
@@ -2251,35 +2248,31 @@
     @VisibleForTesting
     void completeUserSwitch(int oldUserId, int newUserId) {
         final boolean isUserSwitchUiEnabled = isUserSwitchUiEnabled();
-        final Runnable runnable = () -> {
-            if (isUserSwitchUiEnabled) {
-                unfreezeScreen();
-            }
-            mHandler.removeMessages(REPORT_USER_SWITCH_COMPLETE_MSG);
-            mHandler.sendMessage(mHandler.obtainMessage(
-                    REPORT_USER_SWITCH_COMPLETE_MSG, oldUserId, newUserId));
-        };
-
-        // If there is no challenge set, dismiss the keyguard right away
-        if (isUserSwitchUiEnabled && !mInjector.getKeyguardManager().isDeviceSecure(newUserId)) {
-            // Wait until the keyguard is dismissed to unfreeze
-            mInjector.dismissKeyguard(runnable);
-        } else {
-            runnable.run();
-        }
+        // serialize each conditional step
+        await(
+                // STEP 1 - If there is no challenge set, dismiss the keyguard right away
+                isUserSwitchUiEnabled && !mInjector.getKeyguardManager().isDeviceSecure(newUserId),
+                mInjector::dismissKeyguard,
+                () -> await(
+                        // STEP 2 - If user switch ui was enabled, dismiss user switch dialog
+                        isUserSwitchUiEnabled,
+                        this::dismissUserSwitchDialog,
+                        () -> {
+                            // STEP 3 - Send REPORT_USER_SWITCH_COMPLETE_MSG to broadcast
+                            // ACTION_USER_SWITCHED & call UserSwitchObservers.onUserSwitchComplete
+                            mHandler.removeMessages(REPORT_USER_SWITCH_COMPLETE_MSG);
+                            mHandler.sendMessage(mHandler.obtainMessage(
+                                    REPORT_USER_SWITCH_COMPLETE_MSG, oldUserId, newUserId));
+                        }
+                ));
     }
 
-    /**
-     * Tell WindowManager we're ready to unfreeze the screen, at its leisure. Note that there is
-     * likely a lot going on, and WM won't unfreeze until the drawing is all done, so
-     * the actual unfreeze may still not happen for a long time; this is expected.
-     */
-    @VisibleForTesting
-    void unfreezeScreen() {
-        TimingsTraceAndSlog t = new TimingsTraceAndSlog();
-        t.traceBegin("stopFreezingScreen");
-        mInjector.getWindowManager().stopFreezingScreen();
-        t.traceEnd();
+    private void await(boolean condition, Consumer<Runnable> conditionalStep, Runnable nextStep) {
+        if (condition) {
+            conditionalStep.accept(nextStep);
+        } else {
+            nextStep.run();
+        }
     }
 
     private void moveUserToForeground(UserState uss, int newUserId) {
@@ -3731,17 +3724,18 @@
             mService.mCpHelper.installEncryptionUnawareProviders(userId);
         }
 
-        void dismissUserSwitchingDialog() {
+        void dismissUserSwitchingDialog(@Nullable Runnable onDismissed) {
             synchronized (mUserSwitchingDialogLock) {
                 if (mUserSwitchingDialog != null) {
-                    mUserSwitchingDialog.dismiss();
+                    mUserSwitchingDialog.dismiss(onDismissed);
                     mUserSwitchingDialog = null;
                 }
             }
         }
 
         void showUserSwitchingDialog(UserInfo fromUser, UserInfo toUser,
-                String switchingFromSystemUserMessage, String switchingToSystemUserMessage) {
+                String switchingFromSystemUserMessage, String switchingToSystemUserMessage,
+                @NonNull Runnable onShown) {
             if (mService.mContext.getPackageManager()
                     .hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
                 // config_customUserSwitchUi is set to true on Automotive as CarSystemUI is
@@ -3751,11 +3745,10 @@
                         + "condition if it's shown by CarSystemUI as well");
             }
             synchronized (mUserSwitchingDialogLock) {
-                dismissUserSwitchingDialog();
-                mUserSwitchingDialog = new UserSwitchingDialog(mService, mService.mContext,
-                        fromUser, toUser, true /* above system */, switchingFromSystemUserMessage,
-                        switchingToSystemUserMessage);
-                mUserSwitchingDialog.show();
+                dismissUserSwitchingDialog(null);
+                mUserSwitchingDialog = new UserSwitchingDialog(mService.mContext, fromUser, toUser,
+                        switchingFromSystemUserMessage, switchingToSystemUserMessage);
+                mUserSwitchingDialog.show(onShown);
             }
         }
 
diff --git a/services/core/java/com/android/server/am/UserSwitchingDialog.java b/services/core/java/com/android/server/am/UserSwitchingDialog.java
index a5651bf..649305f 100644
--- a/services/core/java/com/android/server/am/UserSwitchingDialog.java
+++ b/services/core/java/com/android/server/am/UserSwitchingDialog.java
@@ -16,160 +16,258 @@
 
 package com.android.server.am;
 
-import android.app.AlertDialog;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.app.ActivityManager;
+import android.app.Dialog;
 import android.content.Context;
 import android.content.pm.UserInfo;
 import android.content.res.Resources;
-import android.os.Handler;
-import android.os.Message;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.graphics.drawable.Animatable2;
+import android.graphics.drawable.AnimatedVectorDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.SystemProperties;
+import android.os.Trace;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.util.Slog;
-import android.view.LayoutInflater;
+import android.util.TypedValue;
 import android.view.View;
-import android.view.ViewTreeObserver;
+import android.view.Window;
 import android.view.WindowManager;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.android.internal.R;
-import com.android.internal.annotations.GuardedBy;
+import com.android.internal.util.ObjectUtils;
+import com.android.internal.util.UserIcons;
 
 /**
- * Dialog to show when a user switch it about to happen. The intent is to snapshot the screen
- * immediately after the dialog shows so that the user is informed that something is happening
- * in the background rather than just freeze the screen and not know if the user-switch affordance
- * was being handled.
+ * Dialog to show during the user switch. This dialog shows target user's name and their profile
+ * picture with a circular spinner animation around it if the animations for this dialog are not
+ * disabled. And covers the whole screen so that all the UI jank caused by the switch are hidden.
  */
-class UserSwitchingDialog extends AlertDialog
-        implements ViewTreeObserver.OnWindowShownListener {
-    private static final String TAG = "ActivityManagerUserSwitchingDialog";
-
-    // Time to wait for the onWindowShown() callback before continuing the user switch
-    private static final int WINDOW_SHOWN_TIMEOUT_MS = 3000;
+class UserSwitchingDialog extends Dialog {
+    private static final String TAG = "UserSwitchingDialog";
+    private static final long TRACE_TAG = Trace.TRACE_TAG_ACTIVITY_MANAGER;
 
     // User switching doesn't happen that frequently, so it doesn't hurt to have it always on
     protected static final boolean DEBUG = true;
+    private static final long DIALOG_SHOW_HIDE_ANIMATION_DURATION_MS = 300;
+    private final boolean mDisableAnimations;
 
-    private final ActivityManagerService mService;
-    private final int mUserId;
-    private static final int MSG_START_USER = 1;
-    @GuardedBy("this")
-    private boolean mStartedUser;
-    final protected UserInfo mOldUser;
-    final protected UserInfo mNewUser;
-    final private String mSwitchingFromSystemUserMessage;
-    final private String mSwitchingToSystemUserMessage;
-    final protected Context mContext;
+    protected final UserInfo mOldUser;
+    protected final UserInfo mNewUser;
+    private final String mSwitchingFromSystemUserMessage;
+    private final String mSwitchingToSystemUserMessage;
+    protected final Context mContext;
+    private final int mTraceCookie;
 
-    public UserSwitchingDialog(ActivityManagerService service, Context context, UserInfo oldUser,
-            UserInfo newUser, boolean aboveSystem, String switchingFromSystemUserMessage,
-            String switchingToSystemUserMessage) {
-        super(context);
+    UserSwitchingDialog(Context context, UserInfo oldUser, UserInfo newUser,
+            String switchingFromSystemUserMessage, String switchingToSystemUserMessage) {
+        // TODO(b/278857848): Make full screen user switcher cover top part of the screen as well.
+        //                    This problem is seen only on phones, it works fine on tablets.
+        super(context, R.style.Theme_Material_NoActionBar_Fullscreen);
 
         mContext = context;
-        mService = service;
-        mUserId = newUser.id;
         mOldUser = oldUser;
         mNewUser = newUser;
         mSwitchingFromSystemUserMessage = switchingFromSystemUserMessage;
         mSwitchingToSystemUserMessage = switchingToSystemUserMessage;
+        mDisableAnimations = ActivityManager.isLowRamDeviceStatic() || SystemProperties.getBoolean(
+                "debug.usercontroller.disable_user_switching_dialog_animations", false);
+        mTraceCookie = UserHandle.MAX_SECONDARY_USER_ID * oldUser.id + newUser.id;
 
         inflateContent();
+        configureWindow();
+    }
 
-        if (aboveSystem) {
-            getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
-        }
-
-        WindowManager.LayoutParams attrs = getWindow().getAttributes();
+    private void configureWindow() {
+        final Window window = getWindow();
+        final WindowManager.LayoutParams attrs = window.getAttributes();
         attrs.privateFlags = WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR |
-            WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
-        getWindow().setAttributes(attrs);
+                WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
+        window.setAttributes(attrs);
+        window.setBackgroundDrawableResource(android.R.color.transparent);
+        window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
     }
 
     void inflateContent() {
-        // Set up the dialog contents
         setCancelable(false);
-        Resources res = getContext().getResources();
-        // Custom view due to alignment and font size requirements
-        TextView view = (TextView) LayoutInflater.from(getContext()).inflate(
-                R.layout.user_switching_dialog, null);
+        setContentView(R.layout.user_switching_dialog);
 
-        String viewMessage = null;
-        if (UserManager.isDeviceInDemoMode(mContext)) {
-            if (mOldUser.isDemo()) {
-                viewMessage = res.getString(R.string.demo_restarting_message);
-            } else {
-                viewMessage = res.getString(R.string.demo_starting_message);
-            }
-        } else {
-            if (mOldUser.id == UserHandle.USER_SYSTEM) {
-                viewMessage = mSwitchingFromSystemUserMessage;
-            } else if (mNewUser.id == UserHandle.USER_SYSTEM) {
-                viewMessage = mSwitchingToSystemUserMessage;
-            }
-
-            // If switchingFromSystemUserMessage or switchingToSystemUserMessage is null, fallback
-            // to system message.
-            if (viewMessage == null) {
-                viewMessage = res.getString(R.string.user_switching_message, mNewUser.name);
-            }
-
-            view.setCompoundDrawablesWithIntrinsicBounds(null,
-                    getContext().getDrawable(R.drawable.ic_swap_horiz), null, null);
+        final TextView textView = findViewById(R.id.message);
+        if (textView != null) {
+            final String message = getTextMessage();
+            textView.setAccessibilityPaneTitle(message);
+            textView.setText(message);
         }
-        view.setAccessibilityPaneTitle(viewMessage);
-        view.setText(viewMessage);
-        setView(view);
+
+        final ImageView imageView = findViewById(R.id.icon);
+        if (imageView != null) {
+            imageView.setImageBitmap(getUserIconRounded());
+        }
+
+        final ImageView progressCircular = findViewById(R.id.progress_circular);
+        if (progressCircular != null) {
+            if (mDisableAnimations) {
+                progressCircular.setVisibility(View.GONE);
+            } else {
+                final TypedValue value = new TypedValue();
+                getContext().getTheme().resolveAttribute(R.attr.colorAccentPrimary, value, true);
+                progressCircular.setColorFilter(value.data);
+            }
+        }
+    }
+
+    private Bitmap getUserIconRounded() {
+        final Bitmap bmp = ObjectUtils.getOrElse(BitmapFactory.decodeFile(mNewUser.iconPath),
+                defaultUserIcon(mNewUser.id));
+        final int w = bmp.getWidth();
+        final int h = bmp.getHeight();
+        final Bitmap bmpRounded = Bitmap.createBitmap(w, h, bmp.getConfig());
+        final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
+        paint.setShader(new BitmapShader(bmp, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
+        new Canvas(bmpRounded).drawRoundRect((new RectF(0, 0, w, h)), w / 2f, h / 2f, paint);
+        return bmpRounded;
+    }
+
+    private Bitmap defaultUserIcon(@UserIdInt int userId) {
+        final Resources res = getContext().getResources();
+        final Drawable icon = UserIcons.getDefaultUserIcon(res, userId, /* light= */ false);
+        return UserIcons.convertToBitmapAtUserIconSize(res, icon);
+    }
+
+    private String getTextMessage() {
+        final Resources res = getContext().getResources();
+
+        if (UserManager.isDeviceInDemoMode(mContext)) {
+            return res.getString(mOldUser.isDemo()
+                    ? R.string.demo_restarting_message
+                    : R.string.demo_starting_message);
+        }
+
+        final String message =
+                mOldUser.id == UserHandle.USER_SYSTEM ? mSwitchingFromSystemUserMessage
+                : mNewUser.id == UserHandle.USER_SYSTEM ? mSwitchingToSystemUserMessage : null;
+
+        return message != null ? message
+                // If switchingFromSystemUserMessage or switchingToSystemUserMessage is null,
+                // fallback to system message.
+                : res.getString(R.string.user_switching_message, mNewUser.name);
     }
 
     @Override
     public void show() {
-        if (DEBUG) Slog.d(TAG, "show called");
+        asyncTraceBegin("", 0);
         super.show();
-        final View decorView = getWindow().getDecorView();
-        if (decorView != null) {
-            decorView.getViewTreeObserver().addOnWindowShownListener(this);
-        }
-        // Add a timeout as a safeguard, in case a race in screen on/off causes the window
-        // callback to never come.
-        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_START_USER),
-                WINDOW_SHOWN_TIMEOUT_MS);
     }
 
     @Override
-    public void onWindowShown() {
-        if (DEBUG) Slog.d(TAG, "onWindowShown called");
-        startUser();
+    public void dismiss() {
+        super.dismiss();
+        asyncTraceEnd("", 0);
     }
 
-    void startUser() {
-        synchronized (this) {
-            if (!mStartedUser) {
-                Slog.i(TAG, "starting user " + mUserId);
-                mService.mUserController.startUserInForeground(mUserId);
+    public void show(@NonNull Runnable onShown) {
+        if (DEBUG) Slog.d(TAG, "show called");
+        show();
+
+        if (mDisableAnimations) {
+            onShown.run();
+        } else {
+            startShowAnimation(onShown);
+        }
+    }
+
+    public void dismiss(@Nullable Runnable onDismissed) {
+        if (DEBUG) Slog.d(TAG, "dismiss called");
+
+        if (onDismissed == null) {
+            // no animation needed
+            dismiss();
+        } else if (mDisableAnimations) {
+            dismiss();
+            onDismissed.run();
+        } else {
+            startDismissAnimation(() -> {
                 dismiss();
-                mStartedUser = true;
-                final View decorView = getWindow().getDecorView();
-                if (decorView != null) {
-                    decorView.getViewTreeObserver().removeOnWindowShownListener(this);
-                }
-                mHandler.removeMessages(MSG_START_USER);
-            } else {
-                Slog.i(TAG, "user " + mUserId + " already started");
-            }
+                onDismissed.run();
+            });
         }
     }
 
-    private final Handler mHandler = new Handler() {
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_START_USER:
-                    Slog.w(TAG, "user switch window not shown in "
-                            + WINDOW_SHOWN_TIMEOUT_MS + " ms");
-                    startUser();
-                    break;
+    private void startShowAnimation(Runnable onAnimationEnd) {
+        asyncTraceBegin("-showAnimation", 1);
+        startDialogAnimation(new AlphaAnimation(0, 1), () -> {
+            asyncTraceEnd("-showAnimation", 1);
+
+            asyncTraceBegin("-spinnerAnimation", 2);
+            startProgressAnimation(() -> {
+                asyncTraceEnd("-spinnerAnimation", 2);
+
+                onAnimationEnd.run();
+            });
+        });
+    }
+
+    private void startDismissAnimation(Runnable onAnimationEnd) {
+        asyncTraceBegin("-dismissAnimation", 3);
+        startDialogAnimation(new AlphaAnimation(1, 0), () -> {
+            asyncTraceEnd("-dismissAnimation", 3);
+
+            onAnimationEnd.run();
+        });
+    }
+
+    private void startProgressAnimation(Runnable onAnimationEnd) {
+        final ImageView progressCircular = findViewById(R.id.progress_circular);
+        final AnimatedVectorDrawable avd = (AnimatedVectorDrawable) progressCircular.getDrawable();
+        avd.registerAnimationCallback(new Animatable2.AnimationCallback() {
+            @Override
+            public void onAnimationEnd(Drawable drawable) {
+                onAnimationEnd.run();
             }
-        }
-    };
+        });
+        avd.start();
+    }
+
+    private void startDialogAnimation(Animation animation, Runnable onAnimationEnd) {
+        animation.setDuration(DIALOG_SHOW_HIDE_ANIMATION_DURATION_MS);
+        animation.setAnimationListener(new Animation.AnimationListener() {
+            @Override
+            public void onAnimationStart(Animation animation) {
+
+            }
+
+            @Override
+            public void onAnimationEnd(Animation animation) {
+                onAnimationEnd.run();
+            }
+
+            @Override
+            public void onAnimationRepeat(Animation animation) {
+
+            }
+        });
+        findViewById(R.id.content).startAnimation(animation);
+    }
+
+    private void asyncTraceBegin(String subTag, int subCookie) {
+        Trace.asyncTraceBegin(TRACE_TAG, TAG + subTag, mTraceCookie + subCookie);
+    }
+
+    private void asyncTraceEnd(String subTag, int subCookie) {
+        Trace.asyncTraceEnd(TRACE_TAG, TAG + subTag, mTraceCookie + subCookie);
+    }
 }
diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
index 1268156..13c42eb 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
@@ -85,6 +85,7 @@
 
     private final @NonNull AudioService mAudioService;
     private final @NonNull Context mContext;
+    private final @NonNull AudioSystemAdapter mAudioSystem;
 
     /** ID for Communication strategy retrieved form audio policy manager */
     private int mCommunicationStrategyId = -1;
@@ -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();
     }
@@ -204,6 +209,7 @@
     private void init() {
         setupMessaging(mContext);
 
+        initAudioHalBluetoothState();
         initRoutingStrategyIds();
         mPreferredCommunicationDevice = null;
         updateActiveCommunicationDevice();
@@ -539,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()) {
@@ -845,10 +851,100 @@
         }
     }
 
-    /**
-     * Current Bluetooth SCO audio active state indicated by BtHelper via setBluetoothScoOn().
-     */
+    // Current Bluetooth SCO audio active state indicated by BtHelper via setBluetoothScoOn().
+    @GuardedBy("mDeviceStateLock")
     private boolean mBluetoothScoOn;
+    // value of BT_SCO parameter currently applied to audio HAL.
+    @GuardedBy("mDeviceStateLock")
+    private boolean mBluetoothScoOnApplied;
+
+    // A2DP suspend state requested by AudioManager.setA2dpSuspended() API.
+    @GuardedBy("mDeviceStateLock")
+    private boolean mBluetoothA2dpSuspendedExt;
+    // A2DP suspend state requested by AudioDeviceInventory.
+    @GuardedBy("mDeviceStateLock")
+    private boolean mBluetoothA2dpSuspendedInt;
+    // value of BT_A2dpSuspendedSCO parameter currently applied to audio HAL.
+    @GuardedBy("mDeviceStateLock")
+    private boolean mBluetoothA2dpSuspendedApplied;
+
+    // LE Audio suspend state requested by AudioManager.setLeAudioSuspended() API.
+    @GuardedBy("mDeviceStateLock")
+    private boolean mBluetoothLeSuspendedExt;
+    // LE Audio suspend state requested by AudioDeviceInventory.
+    @GuardedBy("mDeviceStateLock")
+    private boolean mBluetoothLeSuspendedInt;
+    // value of LeAudioSuspended parameter currently applied to audio HAL.
+    @GuardedBy("mDeviceStateLock")
+    private boolean mBluetoothLeSuspendedApplied;
+
+    private void initAudioHalBluetoothState() {
+        mBluetoothScoOnApplied = false;
+        AudioSystem.setParameters("BT_SCO=off");
+        mBluetoothA2dpSuspendedApplied = false;
+        AudioSystem.setParameters("A2dpSuspended=false");
+        mBluetoothLeSuspendedApplied = false;
+        AudioSystem.setParameters("LeAudioSuspended=false");
+    }
+
+    @GuardedBy("mDeviceStateLock")
+    private void updateAudioHalBluetoothState() {
+        if (mBluetoothScoOn != mBluetoothScoOnApplied) {
+            if (AudioService.DEBUG_COMM_RTE) {
+                Log.v(TAG, "updateAudioHalBluetoothState() mBluetoothScoOn: "
+                        + mBluetoothScoOn + ", mBluetoothScoOnApplied: " + mBluetoothScoOnApplied);
+            }
+            if (mBluetoothScoOn) {
+                if (!mBluetoothA2dpSuspendedApplied) {
+                    AudioSystem.setParameters("A2dpSuspended=true");
+                    mBluetoothA2dpSuspendedApplied = true;
+                }
+                if (!mBluetoothLeSuspendedApplied) {
+                    AudioSystem.setParameters("LeAudioSuspended=true");
+                    mBluetoothLeSuspendedApplied = true;
+                }
+                AudioSystem.setParameters("BT_SCO=on");
+            } else {
+                AudioSystem.setParameters("BT_SCO=off");
+            }
+            mBluetoothScoOnApplied = mBluetoothScoOn;
+        }
+        if (!mBluetoothScoOnApplied) {
+            if ((mBluetoothA2dpSuspendedExt || mBluetoothA2dpSuspendedInt)
+                    != mBluetoothA2dpSuspendedApplied) {
+                if (AudioService.DEBUG_COMM_RTE) {
+                    Log.v(TAG, "updateAudioHalBluetoothState() mBluetoothA2dpSuspendedExt: "
+                            + mBluetoothA2dpSuspendedExt
+                            + ", mBluetoothA2dpSuspendedInt: " + mBluetoothA2dpSuspendedInt
+                            + ", mBluetoothA2dpSuspendedApplied: "
+                            + mBluetoothA2dpSuspendedApplied);
+                }
+                mBluetoothA2dpSuspendedApplied =
+                        mBluetoothA2dpSuspendedExt || mBluetoothA2dpSuspendedInt;
+                if (mBluetoothA2dpSuspendedApplied) {
+                    AudioSystem.setParameters("A2dpSuspended=true");
+                } else {
+                    AudioSystem.setParameters("A2dpSuspended=false");
+                }
+            }
+            if ((mBluetoothLeSuspendedExt || mBluetoothLeSuspendedInt)
+                    != mBluetoothLeSuspendedApplied) {
+                if (AudioService.DEBUG_COMM_RTE) {
+                    Log.v(TAG, "updateAudioHalBluetoothState() mBluetoothLeSuspendedExt: "
+                            + mBluetoothLeSuspendedExt
+                            + ", mBluetoothLeSuspendedInt: " + mBluetoothLeSuspendedInt
+                            + ", mBluetoothLeSuspendedApplied: " + mBluetoothLeSuspendedApplied);
+                }
+                mBluetoothLeSuspendedApplied =
+                        mBluetoothLeSuspendedExt || mBluetoothLeSuspendedInt;
+                if (mBluetoothLeSuspendedApplied) {
+                    AudioSystem.setParameters("LeAudioSuspended=true");
+                } else {
+                    AudioSystem.setParameters("LeAudioSuspended=false");
+                }
+            }
+        }
+    }
 
     /*package*/ void setBluetoothScoOn(boolean on, String eventSource) {
         if (AudioService.DEBUG_COMM_RTE) {
@@ -856,10 +952,67 @@
         }
         synchronized (mDeviceStateLock) {
             mBluetoothScoOn = on;
+            updateAudioHalBluetoothState();
             postUpdateCommunicationRouteClient(eventSource);
         }
     }
 
+    /*package*/ void setA2dpSuspended(boolean enable, boolean internal, String eventSource) {
+        if (AudioService.DEBUG_COMM_RTE) {
+            Log.v(TAG, "setA2dpSuspended source: " + eventSource + ", enable: "
+                    + enable + ", internal: " + internal
+                    + ", mBluetoothA2dpSuspendedInt: " + mBluetoothA2dpSuspendedInt
+                    + ", mBluetoothA2dpSuspendedExt: " + mBluetoothA2dpSuspendedExt);
+        }
+        synchronized (mDeviceStateLock) {
+            if (internal) {
+                mBluetoothA2dpSuspendedInt = enable;
+            } else {
+                mBluetoothA2dpSuspendedExt = enable;
+            }
+            updateAudioHalBluetoothState();
+        }
+    }
+
+    /*package*/ void clearA2dpSuspended() {
+        if (AudioService.DEBUG_COMM_RTE) {
+            Log.v(TAG, "clearA2dpSuspended");
+        }
+        synchronized (mDeviceStateLock) {
+            mBluetoothA2dpSuspendedInt = false;
+            mBluetoothA2dpSuspendedExt = false;
+            updateAudioHalBluetoothState();
+        }
+    }
+
+    /*package*/ void setLeAudioSuspended(boolean enable, boolean internal, String eventSource) {
+        if (AudioService.DEBUG_COMM_RTE) {
+            Log.v(TAG, "setLeAudioSuspended source: " + eventSource + ", enable: "
+                    + enable + ", internal: " + internal
+                    + ", mBluetoothLeSuspendedInt: " + mBluetoothA2dpSuspendedInt
+                    + ", mBluetoothLeSuspendedExt: " + mBluetoothA2dpSuspendedExt);
+        }
+        synchronized (mDeviceStateLock) {
+            if (internal) {
+                mBluetoothLeSuspendedInt = enable;
+            } else {
+                mBluetoothLeSuspendedExt = enable;
+            }
+            updateAudioHalBluetoothState();
+        }
+    }
+
+    /*package*/ void clearLeAudioSuspended() {
+        if (AudioService.DEBUG_COMM_RTE) {
+            Log.v(TAG, "clearLeAudioSuspended");
+        }
+        synchronized (mDeviceStateLock) {
+            mBluetoothLeSuspendedInt = false;
+            mBluetoothLeSuspendedExt = false;
+            updateAudioHalBluetoothState();
+        }
+    }
+
     /*package*/ AudioRoutesInfo startWatchingRoutes(IAudioRoutesObserver observer) {
         synchronized (mDeviceStateLock) {
             return mDeviceInventory.startWatchingRoutes(observer);
@@ -1345,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() {
@@ -1992,12 +2145,6 @@
                 "updateCommunicationRoute, preferredCommunicationDevice: "
                 + preferredCommunicationDevice + " eventSource: " + eventSource)));
 
-        if (preferredCommunicationDevice == null
-                || preferredCommunicationDevice.getType() != AudioDeviceInfo.TYPE_BLUETOOTH_SCO) {
-            AudioSystem.setParameters("BT_SCO=off");
-        } else {
-            AudioSystem.setParameters("BT_SCO=on");
-        }
         if (preferredCommunicationDevice == null) {
             AudioDeviceAttributes defaultDevice = getDefaultCommunicationDevice();
             if (defaultDevice != null) {
diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
index 43063af..228bc87 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
@@ -1167,7 +1167,7 @@
         }
 
         // Reset A2DP suspend state each time a new sink is connected
-        mAudioSystem.setParameters("A2dpSuspended=false");
+        mDeviceBroker.clearA2dpSuspended();
 
         // The convention for head tracking sensors associated with A2DP devices is to
         // use a UUID derived from the MAC address as follows:
@@ -1237,7 +1237,8 @@
     private void makeA2dpDeviceUnavailableLater(String address, int delayMs) {
         // prevent any activity on the A2DP audio output to avoid unwanted
         // reconnection of the sink.
-        mAudioSystem.setParameters("A2dpSuspended=true");
+        mDeviceBroker.setA2dpSuspended(
+                true /*enable*/, true /*internal*/, "makeA2dpDeviceUnavailableLater");
         // retrieve DeviceInfo before removing device
         final String deviceKey =
                 DeviceInfo.makeDeviceListKey(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address);
@@ -1360,7 +1361,7 @@
             }
 
             // Reset LEA suspend state each time a new sink is connected
-            mAudioSystem.setParameters("LeAudioSuspended=false");
+            mDeviceBroker.clearLeAudioSuspended();
 
             mConnectedDevices.put(DeviceInfo.makeDeviceListKey(device, address),
                     new DeviceInfo(device, name, address, AudioSystem.AUDIO_FORMAT_DEFAULT));
@@ -1409,7 +1410,8 @@
     private void makeLeAudioDeviceUnavailableLater(String address, int device, int delayMs) {
         // prevent any activity on the LEA output to avoid unwanted
         // reconnection of the sink.
-        mAudioSystem.setParameters("LeAudioSuspended=true");
+        mDeviceBroker.setLeAudioSuspended(
+                true /*enable*/, true /*internal*/, "makeLeAudioDeviceUnavailableLater");
         // the device will be made unavailable later, so consider it disconnected right away
         mConnectedDevices.remove(DeviceInfo.makeDeviceListKey(device, address));
         // send the delayed message to make the device unavailable later
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index ac55f28..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();
         }
     }
 
@@ -6376,6 +6405,26 @@
         mDeviceBroker.setBluetoothScoOn(on, eventSource);
     }
 
+    /** @see AudioManager#setA2dpSuspended(boolean) */
+    @android.annotation.EnforcePermission(android.Manifest.permission.BLUETOOTH_STACK)
+    public void setA2dpSuspended(boolean enable) {
+        super.setA2dpSuspended_enforcePermission();
+        final String eventSource = new StringBuilder("setA2dpSuspended(").append(enable)
+                .append(") from u/pid:").append(Binder.getCallingUid()).append("/")
+                .append(Binder.getCallingPid()).toString();
+        mDeviceBroker.setA2dpSuspended(enable, false /*internal*/, eventSource);
+    }
+
+    /** @see AudioManager#setA2dpSuspended(boolean) */
+    @android.annotation.EnforcePermission(android.Manifest.permission.BLUETOOTH_STACK)
+    public void setLeAudioSuspended(boolean enable) {
+        super.setLeAudioSuspended_enforcePermission();
+        final String eventSource = new StringBuilder("setLeAudioSuspended(").append(enable)
+                .append(") from u/pid:").append(Binder.getCallingUid()).append("/")
+                .append(Binder.getCallingPid()).toString();
+        mDeviceBroker.setLeAudioSuspended(enable, false /*internal*/, eventSource);
+    }
+
     /** @see AudioManager#isBluetoothScoOn()
      * Note that it doesn't report internal state, but state seen by apps (which may have
      * called setBluetoothScoOn() */
@@ -7053,13 +7102,16 @@
             return deviceSet.iterator().next();
         } else {
             // Multiple device selection is either:
+            //  - dock + one other device: give priority to dock in this case.
             //  - speaker + one other device: give priority to speaker in this case.
             //  - one A2DP device + another device: happens with duplicated output. In this case
             // retain the device on the A2DP output as the other must not correspond to an active
             // selection if not the speaker.
             //  - HDMI-CEC system audio mode only output: give priority to available item in order.
 
-            if (deviceSet.contains(AudioSystem.DEVICE_OUT_SPEAKER)) {
+            if (deviceSet.contains(AudioSystem.DEVICE_OUT_DGTL_DOCK_HEADSET)) {
+                return AudioSystem.DEVICE_OUT_DGTL_DOCK_HEADSET;
+            } else if (deviceSet.contains(AudioSystem.DEVICE_OUT_SPEAKER)) {
                 return AudioSystem.DEVICE_OUT_SPEAKER;
             } else if (deviceSet.contains(AudioSystem.DEVICE_OUT_SPEAKER_SAFE)) {
                 // Note: DEVICE_OUT_SPEAKER_SAFE not present in getDeviceSetForStreamDirect
@@ -7677,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
@@ -8006,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),
@@ -8077,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: ");
@@ -8219,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
@@ -8292,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) {
@@ -8508,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);
                 }
             }
@@ -8966,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);
             }
         }
@@ -10784,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;
@@ -12429,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 7af7ed5..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)
      */
@@ -464,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 631d7f5..8c27c3e 100644
--- a/services/core/java/com/android/server/audio/BtHelper.java
+++ b/services/core/java/com/android/server/audio/BtHelper.java
@@ -492,8 +492,8 @@
     /*package*/ synchronized void resetBluetoothSco() {
         mScoAudioState = SCO_STATE_INACTIVE;
         broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
-        AudioSystem.setParameters("A2dpSuspended=false");
-        AudioSystem.setParameters("LeAudioSuspended=false");
+        mDeviceBroker.clearA2dpSuspended();
+        mDeviceBroker.clearLeAudioSuspended();
         mDeviceBroker.setBluetoothScoOn(false, "resetBluetoothSco");
     }
 
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/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
index 7ae31b2..50d375c 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
@@ -212,6 +212,8 @@
         // 1) Authenticated == true
         // 2) Error occurred
         // 3) Authenticated == false
+        // 4) onLockout
+        // 5) onLockoutTimed
         mCallback.onClientFinished(this, true /* success */);
     }
 
@@ -304,11 +306,7 @@
         PerformanceTracker.getInstanceForSensorId(getSensorId())
                 .incrementTimedLockoutForUser(getTargetUserId());
 
-        try {
-            getListener().onError(getSensorId(), getCookie(), error, 0 /* vendorCode */);
-        } catch (RemoteException e) {
-            Slog.e(TAG, "Remote exception", e);
-        }
+        onError(error, 0 /* vendorCode */);
     }
 
     @Override
@@ -323,10 +321,6 @@
         PerformanceTracker.getInstanceForSensorId(getSensorId())
                 .incrementPermanentLockoutForUser(getTargetUserId());
 
-        try {
-            getListener().onError(getSensorId(), getCookie(), error, 0 /* vendorCode */);
-        } catch (RemoteException e) {
-            Slog.e(TAG, "Remote exception", e);
-        }
+        onError(error, 0 /* vendorCode */);
     }
 }
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java
index 1a53fec..c5037b7 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java
@@ -465,7 +465,7 @@
                         BaseClientMonitor clientMonitor,
                         boolean success) {
                     mAuthSessionCoordinator.authEndedFor(userId, Utils.getCurrentStrength(sensorId),
-                            sensorId, requestId, success);
+                            sensorId, requestId, client.wasAuthSuccessful());
                 }
             });
         });
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 7e48f68..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();
@@ -969,15 +1006,21 @@
         // Allow VpnManager app to temporarily run background services to handle this error.
         // If an app requires anything beyond this grace period, they MUST either declare
         // themselves as a foreground service, or schedule a job/workitem.
-        DeviceIdleInternal idleController = mDeps.getDeviceIdleInternal();
-        idleController.addPowerSaveTempWhitelistApp(Process.myUid(), packageName,
-                VPN_MANAGER_EVENT_ALLOWLIST_DURATION_MS, mUserId, false, REASON_VPN,
-                "VpnManager event");
+        final long token = Binder.clearCallingIdentity();
         try {
-            return mUserIdContext.startService(intent) != null;
-        } catch (RuntimeException e) {
-            Log.e(TAG, "Service of VpnManager app " + intent + " failed to start", e);
-            return false;
+            final DeviceIdleInternal idleController = mDeps.getDeviceIdleInternal();
+            idleController.addPowerSaveTempWhitelistApp(Process.myUid(), packageName,
+                    VPN_MANAGER_EVENT_ALLOWLIST_DURATION_MS, mUserId, false, REASON_VPN,
+                    "VpnManager event");
+
+            try {
+                return mUserIdContext.startService(intent) != null;
+            } catch (RuntimeException e) {
+                Log.e(TAG, "Service of VpnManager app " + intent + " failed to start", e);
+                return false;
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
         }
     }
 
@@ -1102,6 +1145,7 @@
             mAlwaysOn = false;
         }
 
+        final boolean oldLockdownState = mLockdown;
         mLockdown = (mAlwaysOn && lockdown);
         mLockdownAllowlist = (mLockdown && lockdownAllowlist != null)
                 ? Collections.unmodifiableList(new ArrayList<>(lockdownAllowlist))
@@ -1112,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().
@@ -1349,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. */
@@ -1390,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);
@@ -1411,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;
@@ -1491,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);
@@ -1624,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;
@@ -1665,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();
@@ -1682,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.
@@ -1713,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) {
@@ -1907,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.
@@ -3226,7 +3287,6 @@
                             prepareStatusIntent();
                         }
                         agentConnect(this::onValidationStatus);
-                        mSession.setUnderpinnedNetwork(mNetworkAgent.getNetwork());
                         return; // Link properties are already sent.
                     } else {
                         // Underlying networks also set in agentConnect()
@@ -3343,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(
@@ -3622,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) {
@@ -3712,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.
@@ -3729,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 */
@@ -3738,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
@@ -4029,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.
@@ -4466,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/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index 299f865..378363c 100644
--- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -1160,6 +1160,14 @@
         update();
     }
 
+    /**
+     * Convert a brightness float scale value to a nit value. Adjustments, such as RBC, are not
+     * applied. This is used when storing the brightness in nits for the default display and when
+     * passing the brightness value to follower displays.
+     *
+     * @param brightness The float scale value
+     * @return The nit value or -1f if no conversion is possible.
+     */
     public float convertToNits(float brightness) {
         if (mCurrentBrightnessMapper != null) {
             return mCurrentBrightnessMapper.convertToNits(brightness);
@@ -1168,6 +1176,30 @@
         }
     }
 
+    /**
+     * Convert a brightness float scale value to a nit value. Adjustments, such as RBC are applied.
+     * This is used when sending the brightness value to
+     * {@link com.android.server.display.BrightnessTracker}.
+     *
+     * @param brightness The float scale value
+     * @return The nit value or -1f if no conversion is possible.
+     */
+    public float convertToAdjustedNits(float brightness) {
+        if (mCurrentBrightnessMapper != null) {
+            return mCurrentBrightnessMapper.convertToAdjustedNits(brightness);
+        } else {
+            return -1.0f;
+        }
+    }
+
+    /**
+     * Convert a brightness nit value to a float scale value. It is assumed that the nit value
+     * provided does not have adjustments, such as RBC, applied.
+     *
+     * @param nits The nit value
+     * @return The float scale value or {@link PowerManager.BRIGHTNESS_INVALID_FLOAT} if no
+     * conversion is possible.
+     */
     public float convertToFloatScale(float nits) {
         if (mCurrentBrightnessMapper != null) {
             return mCurrentBrightnessMapper.convertToFloatScale(nits);
diff --git a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
index 3456e3e..df2a830 100644
--- a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
+++ b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java
@@ -322,6 +322,14 @@
     public abstract float convertToNits(float brightness);
 
     /**
+     * Converts the provided brightness value to nits if possible. Adjustments, such as RBC are
+     * applied.
+     *
+     * Returns -1.0f if there's no available mapping for the brightness to nits.
+     */
+    public abstract float convertToAdjustedNits(float brightness);
+
+    /**
      * Converts the provided nit value to a float scale value if possible.
      *
      * Returns {@link PowerManager.BRIGHTNESS_INVALID_FLOAT} if there's no available mapping for
@@ -683,6 +691,11 @@
         }
 
         @Override
+        public float convertToAdjustedNits(float brightness) {
+            return -1.0f;
+        }
+
+        @Override
         public float convertToFloatScale(float nits) {
             return PowerManager.BRIGHTNESS_INVALID_FLOAT;
         }
@@ -804,6 +817,14 @@
         // a brightness in nits.
         private Spline mBrightnessToNitsSpline;
 
+        // A spline mapping from nits with adjustments applied to the corresponding brightness
+        // value, normalized to the range [0, 1.0].
+        private Spline mAdjustedNitsToBrightnessSpline;
+
+        // A spline mapping from the system brightness value, normalized to the range [0, 1.0], to
+        // a brightness in nits with adjustments applied.
+        private Spline mBrightnessToAdjustedNitsSpline;
+
         // The default brightness configuration.
         private final BrightnessConfiguration mDefaultConfig;
 
@@ -843,6 +864,8 @@
             mNits = nits;
             mBrightness = brightness;
             computeNitsBrightnessSplines(mNits);
+            mAdjustedNitsToBrightnessSpline = mNitsToBrightnessSpline;
+            mBrightnessToAdjustedNitsSpline = mBrightnessToNitsSpline;
 
             mDefaultConfig = config;
             if (mLoggingEnabled) {
@@ -892,7 +915,7 @@
                 nits = mDisplayWhiteBalanceController.calculateAdjustedBrightnessNits(nits);
             }
 
-            float brightness = mNitsToBrightnessSpline.interpolate(nits);
+            float brightness = mAdjustedNitsToBrightnessSpline.interpolate(nits);
             // Correct the brightness according to the current application and its category, but
             // only if no user data point is set (as this will override the user setting).
             if (mUserLux == -1) {
@@ -930,6 +953,11 @@
         }
 
         @Override
+        public float convertToAdjustedNits(float brightness) {
+            return mBrightnessToAdjustedNitsSpline.interpolate(brightness);
+        }
+
+        @Override
         public float convertToFloatScale(float nits) {
             return mNitsToBrightnessSpline.interpolate(nits);
         }
@@ -989,7 +1017,13 @@
         @Override
         public void recalculateSplines(boolean applyAdjustment, float[] adjustedNits) {
             mBrightnessRangeAdjustmentApplied = applyAdjustment;
-            computeNitsBrightnessSplines(mBrightnessRangeAdjustmentApplied ? adjustedNits : mNits);
+            if (applyAdjustment) {
+                mAdjustedNitsToBrightnessSpline = Spline.createSpline(adjustedNits, mBrightness);
+                mBrightnessToAdjustedNitsSpline = Spline.createSpline(mBrightness, adjustedNits);
+            } else {
+                mAdjustedNitsToBrightnessSpline = mNitsToBrightnessSpline;
+                mBrightnessToAdjustedNitsSpline = mBrightnessToNitsSpline;
+            }
         }
 
         @Override
@@ -999,6 +1033,8 @@
             pw.println("  mBrightnessSpline=" + mBrightnessSpline);
             pw.println("  mNitsToBrightnessSpline=" + mNitsToBrightnessSpline);
             pw.println("  mBrightnessToNitsSpline=" + mBrightnessToNitsSpline);
+            pw.println("  mAdjustedNitsToBrightnessSpline=" + mAdjustedNitsToBrightnessSpline);
+            pw.println("  mAdjustedBrightnessToNitsSpline=" + mBrightnessToAdjustedNitsSpline);
             pw.println("  mMaxGamma=" + mMaxGamma);
             pw.println("  mAutoBrightnessAdjustment=" + mAutoBrightnessAdjustment);
             pw.println("  mUserLux=" + mUserLux);
@@ -1072,7 +1108,7 @@
                 float defaultNits = defaultSpline.interpolate(lux);
                 float longTermNits = currSpline.interpolate(lux);
                 float shortTermNits = mBrightnessSpline.interpolate(lux);
-                float brightness = mNitsToBrightnessSpline.interpolate(shortTermNits);
+                float brightness = mAdjustedNitsToBrightnessSpline.interpolate(shortTermNits);
 
                 String luxPrefix = (lux == mUserLux ? "^" : "");
                 String strLux = luxPrefix + toStrFloatForDump(lux);
@@ -1146,7 +1182,7 @@
             float[] defaultNits = defaultCurve.second;
             float[] defaultBrightness = new float[defaultNits.length];
             for (int i = 0; i < defaultBrightness.length; i++) {
-                defaultBrightness[i] = mNitsToBrightnessSpline.interpolate(defaultNits[i]);
+                defaultBrightness[i] = mAdjustedNitsToBrightnessSpline.interpolate(defaultNits[i]);
             }
             Pair<float[], float[]> curve = getAdjustedCurve(defaultLux, defaultBrightness, mUserLux,
                     mUserBrightness, mAutoBrightnessAdjustment, mMaxGamma);
@@ -1154,7 +1190,7 @@
             float[] brightness = curve.second;
             float[] nits = new float[brightness.length];
             for (int i = 0; i < nits.length; i++) {
-                nits[i] = mBrightnessToNitsSpline.interpolate(brightness[i]);
+                nits[i] = mBrightnessToAdjustedNitsSpline.interpolate(brightness[i]);
             }
             mBrightnessSpline = Spline.createSpline(lux, nits);
         }
@@ -1162,7 +1198,7 @@
         private float getUnadjustedBrightness(float lux) {
             Pair<float[], float[]> curve = mConfig.getCurve();
             Spline spline = Spline.createSpline(curve.first, curve.second);
-            return mNitsToBrightnessSpline.interpolate(spline.interpolate(lux));
+            return mAdjustedNitsToBrightnessSpline.interpolate(spline.interpolate(lux));
         }
 
         private float correctBrightness(float brightness, String packageName, int category) {
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 85b4034..26b6cb0 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>();
@@ -1783,7 +1781,24 @@
         } else {
             configurePreferredDisplayModeLocked(display);
         }
-        addDisplayPowerControllerLocked(display);
+        DisplayPowerControllerInterface dpc = addDisplayPowerControllerLocked(display);
+
+        if (dpc != null) {
+            final int leadDisplayId = display.getLeadDisplayIdLocked();
+            updateDisplayPowerControllerLeaderLocked(dpc, leadDisplayId);
+
+            // Loop through all the displays and check if any should follow this one - it could be
+            // that the follower display was added before the lead display.
+            mLogicalDisplayMapper.forEachLocked(d -> {
+                if (d.getLeadDisplayIdLocked() == displayId) {
+                    DisplayPowerControllerInterface followerDpc =
+                            mDisplayPowerControllers.get(d.getDisplayIdLocked());
+                    if (followerDpc != null) {
+                        updateDisplayPowerControllerLeaderLocked(followerDpc, displayId);
+                    }
+                }
+            });
+        }
 
         mDisplayStates.append(displayId, Display.STATE_UNKNOWN);
 
@@ -1823,24 +1838,19 @@
 
         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);
+            }
         }
     }
 
-    private void updateDisplayPowerControllerLeaderLocked(DisplayPowerControllerInterface dpc,
-            int leadDisplayId) {
+    private void updateDisplayPowerControllerLeaderLocked(
+            @NonNull DisplayPowerControllerInterface dpc, int leadDisplayId) {
         if (dpc.getLeadDisplayId() == leadDisplayId) {
             // Lead display hasn't changed, nothing to do.
             return;
@@ -1858,9 +1868,11 @@
 
         // And then, if it's following, register it with the new one.
         if (leadDisplayId != Layout.NO_LEAD_DISPLAY) {
-            final DisplayPowerControllerInterface newLead =
+            final DisplayPowerControllerInterface newLeader =
                     mDisplayPowerControllers.get(leadDisplayId);
-            newLead.addDisplayBrightnessFollower(dpc);
+            if (newLeader != null) {
+                newLeader.addDisplayBrightnessFollower(dpc);
+            }
         }
     }
 
@@ -1879,6 +1891,7 @@
         final DisplayPowerControllerInterface dpc =
                 mDisplayPowerControllers.removeReturnOld(displayId);
         if (dpc != null) {
+            updateDisplayPowerControllerLeaderLocked(dpc, Layout.NO_LEAD_DISPLAY);
             dpc.stop();
         }
         mDisplayStates.delete(displayId);
@@ -1922,19 +1935,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,31 +3081,12 @@
         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) {
+    private DisplayPowerControllerInterface addDisplayPowerControllerLocked(
+            LogicalDisplay display) {
         if (mPowerHandler == null) {
             // initPowerManagement has not yet been called.
-            return;
+            return null;
         }
 
         if (mBrightnessTracker == null && display.getDisplayIdLocked() == Display.DEFAULT_DISPLAY) {
@@ -3113,7 +3102,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 null;
+        }
         if (DeviceConfig.getBoolean("display_manager",
                 "use_newly_structured_display_power_controller", true)) {
             displayPowerController = new DisplayPowerController2(
@@ -3127,6 +3122,7 @@
                     () -> handleBrightnessChange(display), hbmMetadata, mBootCompleted);
         }
         mDisplayPowerControllers.append(display.getDisplayIdLocked(), displayPowerController);
+        return displayPowerController;
     }
 
     private void handleBrightnessChange(LogicalDisplay display) {
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 7415763..78c5f0e 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);
@@ -786,6 +789,17 @@
         }
     }
 
+    @GuardedBy("mLock")
+    private void clearDisplayBrightnessFollowersLocked() {
+        for (int i = 0; i < mDisplayBrightnessFollowers.size(); i++) {
+            DisplayPowerControllerInterface follower = mDisplayBrightnessFollowers.valueAt(i);
+            mHandler.postAtTime(() -> follower.setBrightnessToFollow(
+                    PowerManager.BRIGHTNESS_INVALID_FLOAT, /* nits= */ -1,
+                    /* ambientLux= */ 0), mClock.uptimeMillis());
+        }
+        mDisplayBrightnessFollowers.clear();
+    }
+
     @Nullable
     @Override
     public ParceledListSlice<AmbientBrightnessDayStats> getAmbientBrightnessStats(
@@ -892,6 +906,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 +941,7 @@
                 mIsEnabled = isEnabled;
                 mIsInTransition = isInTransition;
             }
-
+            mIsDisplayInternal = isDisplayInternal;
             if (changed) {
                 updatePowerState();
             }
@@ -940,6 +957,8 @@
     @Override
     public void stop() {
         synchronized (mLock) {
+            clearDisplayBrightnessFollowersLocked();
+
             mStopped = true;
             Message msg = mHandler.obtainMessage(MSG_STOP);
             mHandler.sendMessageAtTime(msg, mClock.uptimeMillis());
@@ -1033,7 +1052,7 @@
         noteScreenBrightness(mPowerState.getScreenBrightness());
 
         // Initialize all of the brightness tracking state
-        final float brightness = convertToNits(mPowerState.getScreenBrightness());
+        final float brightness = convertToAdjustedNits(mPowerState.getScreenBrightness());
         if (mBrightnessTracker != null && brightness >= PowerManager.BRIGHTNESS_MIN) {
             mBrightnessTracker.start(brightness);
         }
@@ -1810,10 +1829,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();
             }
 
@@ -2691,7 +2711,7 @@
 
     private void notifyBrightnessTrackerChanged(float brightness, boolean userInitiated,
             boolean wasShortTermModelActive) {
-        final float brightnessInNits = convertToNits(brightness);
+        final float brightnessInNits = convertToAdjustedNits(brightness);
         if (mUseAutoBrightness && brightnessInNits >= 0.0f
                 && mAutomaticBrightnessController != null && mBrightnessTracker != null) {
             // We only want to track changes on devices that can actually map the display backlight
@@ -2715,6 +2735,13 @@
         return mAutomaticBrightnessController.convertToNits(brightness);
     }
 
+    private float convertToAdjustedNits(float brightness) {
+        if (mAutomaticBrightnessController == null) {
+            return -1f;
+        }
+        return mAutomaticBrightnessController.convertToAdjustedNits(brightness);
+    }
+
     private float convertToFloatScale(float nits) {
         if (mAutomaticBrightnessController == null) {
             return PowerManager.BRIGHTNESS_INVALID_FLOAT;
@@ -3069,18 +3096,16 @@
         int appliedRbcStrength  = event.isRbcEnabled() ? event.getRbcStrength() : -1;
         float appliedHbmMaxNits =
                 event.getHbmMode() == BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF
-                ? -1f : convertToNits(event.getHbmMax());
+                ? -1f : convertToAdjustedNits(event.getHbmMax());
         // thermalCapNits set to -1 if not currently capping max brightness
         float appliedThermalCapNits =
                 event.getThermalMax() == PowerManager.BRIGHTNESS_MAX
-                ? -1f : convertToNits(event.getThermalMax());
+                ? -1f : convertToAdjustedNits(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()),
+                    convertToAdjustedNits(event.getInitialBrightness()),
+                    convertToAdjustedNits(event.getBrightness()),
                     event.getLux(),
                     event.getPhysicalDisplayId(),
                     event.wasShortTermModelActive(),
diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java
index bf4bae7..a76f907 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();
             }
@@ -757,6 +764,8 @@
     @Override
     public void stop() {
         synchronized (mLock) {
+            clearDisplayBrightnessFollowersLocked();
+
             mStopped = true;
             Message msg = mHandler.obtainMessage(MSG_STOP);
             mHandler.sendMessageAtTime(msg, mClock.uptimeMillis());
@@ -847,7 +856,7 @@
         noteScreenBrightness(mPowerState.getScreenBrightness());
 
         // Initialize all of the brightness tracking state
-        final float brightness = mDisplayBrightnessController.convertToNits(
+        final float brightness = mDisplayBrightnessController.convertToAdjustedNits(
                 mPowerState.getScreenBrightness());
         if (mBrightnessTracker != null && brightness >= PowerManager.BRIGHTNESS_MIN) {
             mBrightnessTracker.start(brightness);
@@ -1449,10 +1458,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();
             }
 
@@ -2157,7 +2167,8 @@
 
     private void notifyBrightnessTrackerChanged(float brightness, boolean userInitiated,
             boolean wasShortTermModelActive) {
-        final float brightnessInNits = mDisplayBrightnessController.convertToNits(brightness);
+        final float brightnessInNits =
+                mDisplayBrightnessController.convertToAdjustedNits(brightness);
         if (mAutomaticBrightnessStrategy.shouldUseAutoBrightness() && brightnessInNits >= 0.0f
                 && mAutomaticBrightnessController != null && mBrightnessTracker != null) {
             // We only want to track changes on devices that can actually map the display backlight
@@ -2192,6 +2203,17 @@
         }
     }
 
+    @GuardedBy("mLock")
+    private void clearDisplayBrightnessFollowersLocked() {
+        for (int i = 0; i < mDisplayBrightnessFollowers.size(); i++) {
+            DisplayPowerControllerInterface follower = mDisplayBrightnessFollowers.valueAt(i);
+            mHandler.postAtTime(() -> follower.setBrightnessToFollow(
+                    PowerManager.BRIGHTNESS_INVALID_FLOAT, /* nits= */ -1,
+                    /* ambientLux= */ 0), mClock.uptimeMillis());
+        }
+        mDisplayBrightnessFollowers.clear();
+    }
+
     @Override
     public void dump(final PrintWriter pw) {
         synchronized (mLock) {
@@ -2218,6 +2240,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);
@@ -2430,17 +2453,16 @@
         int appliedRbcStrength  = event.isRbcEnabled() ? event.getRbcStrength() : -1;
         float appliedHbmMaxNits =
                 event.getHbmMode() == BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF
-                ? -1f : mDisplayBrightnessController.convertToNits(event.getHbmMax());
+                ? -1f : mDisplayBrightnessController.convertToAdjustedNits(event.getHbmMax());
         // thermalCapNits set to -1 if not currently capping max brightness
         float appliedThermalCapNits =
                 event.getThermalMax() == PowerManager.BRIGHTNESS_MAX
-                ? -1f : mDisplayBrightnessController.convertToNits(event.getThermalMax());
-        if (mLogicalDisplay.getPrimaryDisplayDeviceLocked() != null
-                && mLogicalDisplay.getPrimaryDisplayDeviceLocked()
-                .getDisplayDeviceInfoLocked().type == Display.TYPE_INTERNAL) {
+                ? -1f : mDisplayBrightnessController.convertToAdjustedNits(event.getThermalMax());
+        if (mIsDisplayInternal) {
             FrameworkStatsLog.write(FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED,
-                    mDisplayBrightnessController.convertToNits(event.getInitialBrightness()),
-                    mDisplayBrightnessController.convertToNits(event.getBrightness()),
+                    mDisplayBrightnessController
+                            .convertToAdjustedNits(event.getInitialBrightness()),
+                    mDisplayBrightnessController.convertToAdjustedNits(event.getBrightness()),
                     event.getLux(),
                     event.getPhysicalDisplayId(),
                     event.wasShortTermModelActive(),
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/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index dab00d8..0b6d1c8 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -181,6 +181,19 @@
      */
     private String mThermalBrightnessThrottlingDataId;
 
+    /**
+     * Refresh rate range limitation based on the current device layout
+     */
+    @Nullable
+    private SurfaceControl.RefreshRateRange mLayoutLimitedRefreshRate;
+
+    /**
+     * RefreshRateRange limitation for @Temperature.ThrottlingStatus
+     */
+    @NonNull
+    private SparseArray<SurfaceControl.RefreshRateRange> mThermalRefreshRateThrottling =
+            new SparseArray<>();
+
     public LogicalDisplay(int displayId, int layerStack, DisplayDevice primaryDisplayDevice) {
         mDisplayId = displayId;
         mLayerStack = layerStack;
@@ -339,24 +352,24 @@
      */
     public void updateLayoutLimitedRefreshRateLocked(
             @Nullable SurfaceControl.RefreshRateRange layoutLimitedRefreshRate) {
-        if (!Objects.equals(layoutLimitedRefreshRate, mBaseDisplayInfo.layoutLimitedRefreshRate)) {
-            mBaseDisplayInfo.layoutLimitedRefreshRate = layoutLimitedRefreshRate;
-            mInfo.set(null);
+        if (!Objects.equals(layoutLimitedRefreshRate, mLayoutLimitedRefreshRate)) {
+            mLayoutLimitedRefreshRate = layoutLimitedRefreshRate;
+            mDirty = true;
         }
     }
     /**
-     * Updates refreshRateThermalThrottling
+     * Updates thermalRefreshRateThrottling
      *
-     * @param refreshRanges new refreshRateThermalThrottling ranges limited by layout or default
+     * @param refreshRanges new thermalRefreshRateThrottling ranges limited by layout or default
      */
     public void updateThermalRefreshRateThrottling(
             @Nullable SparseArray<SurfaceControl.RefreshRateRange> refreshRanges) {
         if (refreshRanges == null) {
             refreshRanges = new SparseArray<>();
         }
-        if (!mBaseDisplayInfo.refreshRateThermalThrottling.contentEquals(refreshRanges)) {
-            mBaseDisplayInfo.refreshRateThermalThrottling = refreshRanges;
-            mInfo.set(null);
+        if (!mThermalRefreshRateThrottling.contentEquals(refreshRanges)) {
+            mThermalRefreshRateThrottling = refreshRanges;
+            mDirty = true;
         }
     }
 
@@ -499,6 +512,9 @@
                 mBaseDisplayInfo.removeMode = Display.REMOVE_MODE_DESTROY_CONTENT;
             }
 
+            mBaseDisplayInfo.layoutLimitedRefreshRate = mLayoutLimitedRefreshRate;
+            mBaseDisplayInfo.thermalRefreshRateThrottling = mThermalRefreshRateThrottling;
+
             mPrimaryDisplayDeviceInfo = deviceInfo;
             mInfo.set(null);
             mDirty = false;
@@ -952,6 +968,8 @@
         pw.println("mDisplayGroupName=" + mDisplayGroupName);
         pw.println("mThermalBrightnessThrottlingDataId=" + mThermalBrightnessThrottlingDataId);
         pw.println("mLeadDisplayId=" + mLeadDisplayId);
+        pw.println("mLayoutLimitedRefreshRate=" + mLayoutLimitedRefreshRate);
+        pw.println("mThermalRefreshRateThrottling=" + mThermalRefreshRateThrottling);
     }
 
     @Override
diff --git a/services/core/java/com/android/server/display/PersistentDataStore.java b/services/core/java/com/android/server/display/PersistentDataStore.java
index ec70c89..6d6ed72 100644
--- a/services/core/java/com/android/server/display/PersistentDataStore.java
+++ b/services/core/java/com/android/server/display/PersistentDataStore.java
@@ -306,8 +306,11 @@
     }
 
     public boolean setBrightness(DisplayDevice displayDevice, float brightness) {
+        if (displayDevice == null || !displayDevice.hasStableUniqueId()) {
+            return false;
+        }
         final String displayDeviceUniqueId = displayDevice.getUniqueId();
-        if (!displayDevice.hasStableUniqueId() || displayDeviceUniqueId == null) {
+        if (displayDeviceUniqueId == null) {
             return false;
         }
         final DisplayState state = getDisplayState(displayDeviceUniqueId, true);
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/display/brightness/DisplayBrightnessController.java b/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
index 2916fef..a3f8c4d 100644
--- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
+++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
@@ -312,7 +312,10 @@
     }
 
     /**
-     * Convert a brightness float scale value to a nit value.
+     * Convert a brightness float scale value to a nit value. Adjustments, such as RBC, are not
+     * applied. This is used when storing the brightness in nits for the default display and when
+     * passing the brightness value to follower displays.
+     *
      * @param brightness The float scale value
      * @return The nit value or -1f if no conversion is possible.
      */
@@ -324,7 +327,24 @@
     }
 
     /**
-     * Convert a brightness nit value to a float scale value.
+     * Convert a brightness float scale value to a nit value. Adjustments, such as RBC are applied.
+     * This is used when sending the brightness value to
+     * {@link com.android.server.display.BrightnessTracker}.
+     *
+     * @param brightness The float scale value
+     * @return The nit value or -1f if no conversion is possible.
+     */
+    public float convertToAdjustedNits(float brightness) {
+        if (mAutomaticBrightnessController == null) {
+            return -1f;
+        }
+        return mAutomaticBrightnessController.convertToAdjustedNits(brightness);
+    }
+
+    /**
+     * Convert a brightness nit value to a float scale value. It is assumed that the nit value
+     * provided does not have adjustments, such as RBC, applied.
+     *
      * @param nits The nit value
      * @return The float scale value or {@link PowerManager.BRIGHTNESS_INVALID_FLOAT} if no
      * conversion is possible.
diff --git a/services/core/java/com/android/server/display/mode/DisplayModeDirector.java b/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
index 0189294..06b7698 100644
--- a/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
+++ b/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
@@ -65,6 +65,7 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.display.BrightnessSynchronizer;
+import com.android.internal.display.RefreshRateSettingsUtils;
 import com.android.internal.os.BackgroundThread;
 import com.android.server.LocalServices;
 import com.android.server.display.DisplayDeviceConfig;
@@ -1171,7 +1172,7 @@
         public static final int PRIORITY_HIGH_BRIGHTNESS_MODE = 2;
 
         // SETTING_MIN_RENDER_FRAME_RATE is used to propose a lower bound of the render frame rate.
-        // It votes [MIN_REFRESH_RATE, Float.POSITIVE_INFINITY]
+        // It votes [minRefreshRate, Float.POSITIVE_INFINITY]
         public static final int PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE = 3;
 
         // APP_REQUEST_RENDER_FRAME_RATE_RANGE is used to for internal apps to limit the render
@@ -1376,10 +1377,10 @@
 
     @VisibleForTesting
     final class SettingsObserver extends ContentObserver {
-        private final Uri mPeakRefreshRateSetting =
-                Settings.System.getUriFor(Settings.System.PEAK_REFRESH_RATE);
-        private final Uri mMinRefreshRateSetting =
-                Settings.System.getUriFor(Settings.System.MIN_REFRESH_RATE);
+        private final Uri mSmoothDisplaySetting =
+                Settings.System.getUriFor(Settings.System.SMOOTH_DISPLAY);
+        private final Uri mForcePeakRefreshRateSetting =
+                Settings.System.getUriFor(Settings.System.FORCE_PEAK_REFRESH_RATE);
         private final Uri mLowPowerModeSetting =
                 Settings.Global.getUriFor(Settings.Global.LOW_POWER_MODE);
         private final Uri mMatchContentFrameRateSetting =
@@ -1415,9 +1416,8 @@
 
         public void observe() {
             final ContentResolver cr = mContext.getContentResolver();
-            mInjector.registerPeakRefreshRateObserver(cr, this);
-            cr.registerContentObserver(mMinRefreshRateSetting, false /*notifyDescendants*/, this,
-                    UserHandle.USER_SYSTEM);
+            mInjector.registerSmoothDisplayObserver(cr, this);
+            mInjector.registerForcePeakRefreshRateObserver(cr, this);
             cr.registerContentObserver(mLowPowerModeSetting, false /*notifyDescendants*/, this,
                     UserHandle.USER_SYSTEM);
             cr.registerContentObserver(mMatchContentFrameRateSetting, false /*notifyDescendants*/,
@@ -1459,8 +1459,8 @@
         @Override
         public void onChange(boolean selfChange, Uri uri, int userId) {
             synchronized (mLock) {
-                if (mPeakRefreshRateSetting.equals(uri)
-                        || mMinRefreshRateSetting.equals(uri)) {
+                if (mSmoothDisplaySetting.equals(uri)
+                        || mForcePeakRefreshRateSetting.equals(uri)) {
                     updateRefreshRateSettingLocked();
                 } else if (mLowPowerModeSetting.equals(uri)) {
                     updateLowPowerModeSettingLocked();
@@ -1515,12 +1515,9 @@
         }
 
         private void updateRefreshRateSettingLocked() {
-            final ContentResolver cr = mContext.getContentResolver();
-            float minRefreshRate = Settings.System.getFloatForUser(cr,
-                    Settings.System.MIN_REFRESH_RATE, 0f, cr.getUserId());
-            float peakRefreshRate = Settings.System.getFloatForUser(cr,
-                    Settings.System.PEAK_REFRESH_RATE, mDefaultPeakRefreshRate, cr.getUserId());
-            updateRefreshRateSettingLocked(minRefreshRate, peakRefreshRate, mDefaultRefreshRate);
+            updateRefreshRateSettingLocked(RefreshRateSettingsUtils.getMinRefreshRate(mContext),
+                    RefreshRateSettingsUtils.getPeakRefreshRate(mContext, mDefaultPeakRefreshRate),
+                    mDefaultRefreshRate);
         }
 
         private void updateRefreshRateSettingLocked(
@@ -1708,14 +1705,13 @@
         }
 
         public void observe() {
-            DisplayManager dm = mContext.getSystemService(DisplayManager.class);
-            dm.registerDisplayListener(this, mHandler);
+            mInjector.registerDisplayListener(this, mHandler);
 
             // Populate existing displays
             SparseArray<Display.Mode[]> modes = new SparseArray<>();
             SparseArray<Display.Mode> defaultModes = new SparseArray<>();
             DisplayInfo info = new DisplayInfo();
-            Display[] displays = dm.getDisplays(DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED);
+            Display[] displays = mInjector.getDisplays();
             for (Display d : displays) {
                 final int displayId = d.getDisplayId();
                 d.getDisplayInfo(info);
@@ -1754,17 +1750,9 @@
             updateLayoutLimitedFrameRate(displayId, displayInfo);
         }
 
-        @Nullable
         private DisplayInfo getDisplayInfo(int displayId) {
-            Display d = mContext.getSystemService(DisplayManager.class).getDisplay(displayId);
-            if (d == null) {
-                // We can occasionally get a display added or changed event for a display that was
-                // subsequently removed, which means this returns null. Check this case and bail
-                // out early; if it gets re-attached we'll eventually get another call back for it.
-                return null;
-            }
             DisplayInfo info = new DisplayInfo();
-            d.getDisplayInfo(info);
+            mInjector.getDisplayInfo(displayId, info);
             return info;
         }
 
@@ -2435,8 +2423,7 @@
         }
 
         private void updateDefaultDisplayState() {
-            Display display = mContext.getSystemService(DisplayManager.class)
-                    .getDisplay(Display.DEFAULT_DISPLAY);
+            Display display = mInjector.getDisplay(Display.DEFAULT_DISPLAY);
             if (display == null) {
                 return;
             }
@@ -2753,8 +2740,7 @@
             sensorManager.addProximityActiveListener(BackgroundThread.getExecutor(), this);
 
             synchronized (mSensorObserverLock) {
-                for (Display d : mDisplayManager.getDisplays(
-                        DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED)) {
+                for (Display d : mInjector.getDisplays()) {
                     mDozeStateByDisplay.put(d.getDisplayId(), mInjector.isDozeState(d));
                 }
             }
@@ -2765,8 +2751,7 @@
         }
 
         private void recalculateVotesLocked() {
-            final Display[] displays = mDisplayManager.getDisplays(
-                    DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED);
+            final Display[] displays = mInjector.getDisplays();
             for (Display d : displays) {
                 int displayId = d.getDisplayId();
                 Vote vote = null;
@@ -2797,7 +2782,7 @@
 
         @Override
         public void onDisplayAdded(int displayId) {
-            boolean isDozeState = mInjector.isDozeState(mDisplayManager.getDisplay(displayId));
+            boolean isDozeState = mInjector.isDozeState(mInjector.getDisplay(displayId));
             synchronized (mSensorObserverLock) {
                 mDozeStateByDisplay.put(displayId, isDozeState);
                 recalculateVotesLocked();
@@ -2809,7 +2794,7 @@
             boolean wasDozeState = mDozeStateByDisplay.get(displayId);
             synchronized (mSensorObserverLock) {
                 mDozeStateByDisplay.put(displayId,
-                        mInjector.isDozeState(mDisplayManager.getDisplay(displayId)));
+                        mInjector.isDozeState(mInjector.getDisplay(displayId)));
                 if (wasDozeState != mDozeStateByDisplay.get(displayId)) {
                     recalculateVotesLocked();
                 }
@@ -3165,17 +3150,27 @@
     }
 
     interface Injector {
-        Uri PEAK_REFRESH_RATE_URI = Settings.System.getUriFor(Settings.System.PEAK_REFRESH_RATE);
+        Uri SMOOTH_DISPLAY_URI = Settings.System.getUriFor(Settings.System.SMOOTH_DISPLAY);
+        Uri FORCE_PEAK_REFRESH_RATE_URI =
+                Settings.System.getUriFor(Settings.System.FORCE_PEAK_REFRESH_RATE);
 
         @NonNull
         DeviceConfigInterface getDeviceConfig();
 
-        void registerPeakRefreshRateObserver(@NonNull ContentResolver cr,
+        void registerSmoothDisplayObserver(@NonNull ContentResolver cr,
+                @NonNull ContentObserver observer);
+
+        void registerForcePeakRefreshRateObserver(@NonNull ContentResolver cr,
                 @NonNull ContentObserver observer);
 
         void registerDisplayListener(@NonNull DisplayManager.DisplayListener listener,
+                Handler handler);
+
+        void registerDisplayListener(@NonNull DisplayManager.DisplayListener listener,
                 Handler handler, long flags);
 
+        Display getDisplay(int displayId);
+
         Display[] getDisplays();
 
         boolean getDisplayInfo(int displayId, DisplayInfo displayInfo);
@@ -3205,19 +3200,37 @@
         }
 
         @Override
-        public void registerPeakRefreshRateObserver(@NonNull ContentResolver cr,
+        public void registerSmoothDisplayObserver(@NonNull ContentResolver cr,
                 @NonNull ContentObserver observer) {
-            cr.registerContentObserver(PEAK_REFRESH_RATE_URI, false /*notifyDescendants*/,
+            cr.registerContentObserver(SMOOTH_DISPLAY_URI, false /*notifyDescendants*/,
                     observer, UserHandle.USER_SYSTEM);
         }
 
         @Override
+        public void registerForcePeakRefreshRateObserver(@NonNull ContentResolver cr,
+                @NonNull ContentObserver observer) {
+            cr.registerContentObserver(FORCE_PEAK_REFRESH_RATE_URI, false /*notifyDescendants*/,
+                    observer, UserHandle.USER_SYSTEM);
+        }
+
+        @Override
+        public void registerDisplayListener(DisplayManager.DisplayListener listener,
+                Handler handler) {
+            getDisplayManager().registerDisplayListener(listener, handler);
+        }
+
+        @Override
         public void registerDisplayListener(DisplayManager.DisplayListener listener,
                 Handler handler, long flags) {
             getDisplayManager().registerDisplayListener(listener, handler, flags);
         }
 
         @Override
+        public Display getDisplay(int displayId) {
+            return getDisplayManager().getDisplay(displayId);
+        }
+
+        @Override
         public Display[] getDisplays() {
             return getDisplayManager().getDisplays(DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED);
         }
@@ -3225,10 +3238,13 @@
         @Override
         public boolean getDisplayInfo(int displayId, DisplayInfo displayInfo) {
             Display display = getDisplayManager().getDisplay(displayId);
-            if (display != null) {
-                return display.getDisplayInfo(displayInfo);
+            if (display == null) {
+                // We can occasionally get a display added or changed event for a display that was
+                // subsequently removed, which means this returns null. Check this case and bail
+                // out early; if it gets re-attached we'll eventually get another call back for it.
+                return false;
             }
-            return false;
+            return display.getDisplayInfo(displayInfo);
         }
 
         @Override
diff --git a/services/core/java/com/android/server/display/mode/SkinThermalStatusObserver.java b/services/core/java/com/android/server/display/mode/SkinThermalStatusObserver.java
index c04735d..8a3b329 100644
--- a/services/core/java/com/android/server/display/mode/SkinThermalStatusObserver.java
+++ b/services/core/java/com/android/server/display/mode/SkinThermalStatusObserver.java
@@ -138,7 +138,7 @@
         for (Display d : displays) {
             final int displayId = d.getDisplayId();
             d.getDisplayInfo(info);
-            localMap.put(displayId, info.refreshRateThermalThrottling);
+            localMap.put(displayId, info.thermalRefreshRateThrottling);
         }
         synchronized (mThermalObserverLock) {
             for (int i = 0; i < size; i++) {
@@ -154,7 +154,7 @@
         DisplayInfo displayInfo = new DisplayInfo();
         mInjector.getDisplayInfo(displayId, displayInfo);
         SparseArray<SurfaceControl.RefreshRateRange> throttlingMap =
-                displayInfo.refreshRateThermalThrottling;
+                displayInfo.thermalRefreshRateThrottling;
 
         synchronized (mThermalObserverLock) {
             mThermalThrottlingByDisplay.put(displayId, throttlingMap);
diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java
index 7802b9d..0e26d46 100644
--- a/services/core/java/com/android/server/dreams/DreamManagerService.java
+++ b/services/core/java/com/android/server/dreams/DreamManagerService.java
@@ -124,7 +124,7 @@
     private final boolean mDreamsEnabledByDefaultConfig;
     private final boolean mDreamsActivatedOnChargeByDefault;
     private final boolean mDreamsActivatedOnDockByDefault;
-    private final boolean mKeepDreamingWhenUndockedDefault;
+    private final boolean mKeepDreamingWhenUnpluggingDefault;
 
     private final CopyOnWriteArrayList<DreamManagerInternal.DreamManagerStateListener>
             mDreamManagerStateListeners = new CopyOnWriteArrayList<>();
@@ -236,8 +236,8 @@
         mDreamsActivatedOnDockByDefault = mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault);
         mSettingsObserver = new SettingsObserver(mHandler);
-        mKeepDreamingWhenUndockedDefault = mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_keepDreamingWhenUndocking);
+        mKeepDreamingWhenUnpluggingDefault = mContext.getResources().getBoolean(
+                com.android.internal.R.bool.config_keepDreamingWhenUnplugging);
     }
 
     @Override
@@ -311,7 +311,7 @@
             pw.println("mIsDocked=" + mIsDocked);
             pw.println("mIsCharging=" + mIsCharging);
             pw.println("mWhenToDream=" + mWhenToDream);
-            pw.println("mKeepDreamingWhenUndockedDefault=" + mKeepDreamingWhenUndockedDefault);
+            pw.println("mKeepDreamingWhenUnpluggingDefault=" + mKeepDreamingWhenUnpluggingDefault);
             pw.println("getDozeComponent()=" + getDozeComponent());
             pw.println();
 
@@ -340,11 +340,11 @@
         }
     }
 
-    private void reportKeepDreamingWhenUndockedChanged(boolean keepDreaming) {
+    private void reportKeepDreamingWhenUnpluggingChanged(boolean keepDreaming) {
         mHandler.post(() -> {
             for (DreamManagerInternal.DreamManagerStateListener listener
                     : mDreamManagerStateListeners) {
-                listener.onKeepDreamingWhenUndockedChanged(keepDreaming);
+                listener.onKeepDreamingWhenUnpluggingChanged(keepDreaming);
             }
         });
     }
@@ -600,8 +600,7 @@
             }
 
             mSystemDreamComponent = componentName;
-            reportKeepDreamingWhenUndockedChanged(shouldKeepDreamingWhenUndocked());
-
+            reportKeepDreamingWhenUnpluggingChanged(shouldKeepDreamingWhenUnplugging());
             // Switch dream if currently dreaming and not dozing.
             if (isDreamingInternal() && !isDozingInternal()) {
                 startDreamInternal(false /*doze*/, (mSystemDreamComponent == null ? "clear" : "set")
@@ -610,8 +609,8 @@
         }
     }
 
-    private boolean shouldKeepDreamingWhenUndocked() {
-        return mKeepDreamingWhenUndockedDefault && mSystemDreamComponent == null;
+    private boolean shouldKeepDreamingWhenUnplugging() {
+        return mKeepDreamingWhenUnpluggingDefault && mSystemDreamComponent == null;
     }
 
     private ComponentName getDefaultDreamComponentForUser(int userId) {
@@ -1057,7 +1056,7 @@
         public void registerDreamManagerStateListener(DreamManagerStateListener listener) {
             mDreamManagerStateListeners.add(listener);
             // Initialize the listener's state.
-            listener.onKeepDreamingWhenUndockedChanged(shouldKeepDreamingWhenUndocked());
+            listener.onKeepDreamingWhenUnpluggingChanged(shouldKeepDreamingWhenUnplugging());
         }
 
         @Override
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/inputmethod/OWNERS b/services/core/java/com/android/server/inputmethod/OWNERS
index 00cd700..6e5eb56 100644
--- a/services/core/java/com/android/server/inputmethod/OWNERS
+++ b/services/core/java/com/android/server/inputmethod/OWNERS
@@ -1,8 +1,8 @@
 set noparent
 
-ogunwale@google.com
+roosa@google.com
 yukawa@google.com
 tarandeep@google.com
-lumark@google.com
-roosa@google.com
-wilsonwu@google.com
+
+ogunwale@google.com #{LAST_RESORT_SUGGESTION}
+jjaggi@google.com #{LAST_RESORT_SUGGESTION}
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/GroupHelper.java b/services/core/java/com/android/server/notification/GroupHelper.java
index 273afcc..dff02bf 100644
--- a/services/core/java/com/android/server/notification/GroupHelper.java
+++ b/services/core/java/com/android/server/notification/GroupHelper.java
@@ -15,44 +15,53 @@
  */
 package com.android.server.notification;
 
+import static android.app.Notification.FLAG_AUTOGROUP_SUMMARY;
+import static android.app.Notification.FLAG_AUTO_CANCEL;
+import static android.app.Notification.FLAG_GROUP_SUMMARY;
+import static android.app.Notification.FLAG_LOCAL_ONLY;
+import static android.app.Notification.FLAG_NO_CLEAR;
+import static android.app.Notification.FLAG_ONGOING_EVENT;
+
+import android.annotation.NonNull;
 import android.service.notification.StatusBarNotification;
 import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.Log;
 import android.util.Slog;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 
 import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Map;
 
 /**
  * NotificationManagerService helper for auto-grouping notifications.
  */
 public class GroupHelper {
     private static final String TAG = "GroupHelper";
-    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     protected static final String AUTOGROUP_KEY = "ranker_group";
 
+    // Flags that all autogroup summaries have
+    protected static final int BASE_FLAGS =
+            FLAG_AUTOGROUP_SUMMARY | FLAG_GROUP_SUMMARY | FLAG_LOCAL_ONLY;
+    // Flag that autogroup summaries inherits if all children have the flag
+    private static final int ALL_CHILDREN_FLAG = FLAG_AUTO_CANCEL;
+    // Flags that autogroup summaries inherits if any child has them
+    private static final int ANY_CHILDREN_FLAGS = FLAG_ONGOING_EVENT | FLAG_NO_CLEAR;
+
     private final Callback mCallback;
     private final int mAutoGroupAtCount;
 
-    // count the number of ongoing notifications per group
-    // userId|packageName -> (set of ongoing notifications that aren't in an app group)
-    final ArrayMap<String, ArraySet<String>>
-            mOngoingGroupCount = new ArrayMap<>();
-
-    // Map of user : <Map of package : notification keys>. Only contains notifications that are not
-    // grouped by the app (aka no group or sort key).
-    Map<Integer, Map<String, LinkedHashSet<String>>> mUngroupedNotifications = new HashMap<>();
+    // Only contains notifications that are not explicitly grouped by the app (aka no group or
+    // sort key).
+    // userId|packageName -> (keys of notifications that aren't in an explicit app group -> flags)
+    @GuardedBy("mUngroupedNotifications")
+    private final ArrayMap<String, ArrayMap<String, Integer>> mUngroupedNotifications
+            = new ArrayMap<>();
 
     public GroupHelper(int autoGroupAtCount, Callback callback) {
         mAutoGroupAtCount = autoGroupAtCount;
-        mCallback = callback;
+        mCallback =  callback;
     }
 
     private String generatePackageKey(int userId, String pkg) {
@@ -60,69 +69,30 @@
     }
 
     @VisibleForTesting
-    protected int getOngoingGroupCount(int userId, String pkg) {
-        String key = generatePackageKey(userId, pkg);
-        return mOngoingGroupCount.getOrDefault(key, new ArraySet<>(0)).size();
+    @GuardedBy("mUngroupedNotifications")
+    protected int getAutogroupSummaryFlags(@NonNull final ArrayMap<String, Integer> children) {
+        boolean allChildrenHasFlag = children.size() > 0;
+        int anyChildFlagSet = 0;
+        for (int i = 0; i < children.size(); i++) {
+            if (!hasAnyFlag(children.valueAt(i), ALL_CHILDREN_FLAG)) {
+                allChildrenHasFlag = false;
+            }
+            if (hasAnyFlag(children.valueAt(i), ANY_CHILDREN_FLAGS)) {
+                anyChildFlagSet |= (children.valueAt(i) & ANY_CHILDREN_FLAGS);
+            }
+        }
+        return BASE_FLAGS | (allChildrenHasFlag ? ALL_CHILDREN_FLAG : 0) | anyChildFlagSet;
     }
 
-    private void updateOngoingGroupCount(StatusBarNotification sbn, boolean add) {
-        if (sbn.getNotification().isGroupSummary()) {
-            return;
-        }
-        String key = generatePackageKey(sbn.getUserId(), sbn.getPackageName());
-        ArraySet<String> notifications = mOngoingGroupCount.getOrDefault(key, new ArraySet<>(0));
-        if (add) {
-            notifications.add(sbn.getKey());
-            mOngoingGroupCount.put(key, notifications);
-        } else {
-            notifications.remove(sbn.getKey());
-            // we don't need to put it back if it is default
-        }
-
-        boolean needsOngoingFlag = notifications.size() > 0;
-        mCallback.updateAutogroupSummary(sbn.getUserId(), sbn.getPackageName(), needsOngoingFlag);
-    }
-
-    public void onNotificationUpdated(StatusBarNotification childSbn) {
-        updateOngoingGroupCount(childSbn, childSbn.isOngoing() && !childSbn.isAppGroup());
+    private boolean hasAnyFlag(int flags, int mask) {
+        return (flags & mask) != 0;
     }
 
     public void onNotificationPosted(StatusBarNotification sbn, boolean autogroupSummaryExists) {
         try {
-            updateOngoingGroupCount(sbn, sbn.isOngoing() && !sbn.isAppGroup());
-
-            List<String> notificationsToGroup = new ArrayList<>();
             if (!sbn.isAppGroup()) {
-                // Not grouped by the app, add to the list of notifications for the app;
-                // send grouping update if app exceeds the autogrouping limit.
-                synchronized (mUngroupedNotifications) {
-                    Map<String, LinkedHashSet<String>> ungroupedNotificationsByUser
-                            = mUngroupedNotifications.get(sbn.getUserId());
-                    if (ungroupedNotificationsByUser == null) {
-                        ungroupedNotificationsByUser = new HashMap<>();
-                    }
-                    mUngroupedNotifications.put(sbn.getUserId(), ungroupedNotificationsByUser);
-                    LinkedHashSet<String> notificationsForPackage
-                            = ungroupedNotificationsByUser.get(sbn.getPackageName());
-                    if (notificationsForPackage == null) {
-                        notificationsForPackage = new LinkedHashSet<>();
-                    }
-
-                    notificationsForPackage.add(sbn.getKey());
-                    ungroupedNotificationsByUser.put(sbn.getPackageName(), notificationsForPackage);
-
-                    if (notificationsForPackage.size() >= mAutoGroupAtCount
-                            || autogroupSummaryExists) {
-                        notificationsToGroup.addAll(notificationsForPackage);
-                    }
-                }
-                if (notificationsToGroup.size() > 0) {
-                    adjustAutogroupingSummary(sbn.getUserId(), sbn.getPackageName(),
-                            notificationsToGroup.get(0), true);
-                    adjustNotificationBundling(notificationsToGroup, true);
-                }
+                maybeGroup(sbn, autogroupSummaryExists);
             } else {
-                // Grouped, but not by us. Send updates to un-autogroup, if we grouped it.
                 maybeUngroup(sbn, false, sbn.getUserId());
             }
 
@@ -133,7 +103,6 @@
 
     public void onNotificationRemoved(StatusBarNotification sbn) {
         try {
-            updateOngoingGroupCount(sbn, false);
             maybeUngroup(sbn, true, sbn.getUserId());
         } catch (Exception e) {
             Slog.e(TAG, "Error processing canceled notification", e);
@@ -141,70 +110,114 @@
     }
 
     /**
-     * Un-autogroups notifications that are now grouped by the app.
+     * A non-app grouped notification has been added or updated
+     * Evaluate if:
+     * (a) an existing autogroup summary needs updated flags
+     * (b) a new autogroup summary needs to be added with correct flags
+     * (c) other non-app grouped children need to be moved to the autogroup
+     *
+     * And stores the list of upgrouped notifications & their flags
+     */
+    private void maybeGroup(StatusBarNotification sbn, boolean autogroupSummaryExists) {
+        int flags = 0;
+        List<String> notificationsToGroup = new ArrayList<>();
+        synchronized (mUngroupedNotifications) {
+            String key = generatePackageKey(sbn.getUserId(), sbn.getPackageName());
+            final ArrayMap<String, Integer> children =
+                    mUngroupedNotifications.getOrDefault(key, new ArrayMap<>());
+
+            children.put(sbn.getKey(), sbn.getNotification().flags);
+            mUngroupedNotifications.put(key, children);
+
+            if (children.size() >= mAutoGroupAtCount || autogroupSummaryExists) {
+                flags = getAutogroupSummaryFlags(children);
+                notificationsToGroup.addAll(children.keySet());
+            }
+        }
+        if (notificationsToGroup.size() > 0) {
+            if (autogroupSummaryExists) {
+                mCallback.updateAutogroupSummary(sbn.getUserId(), sbn.getPackageName(), flags);
+            } else {
+                mCallback.addAutoGroupSummary(
+                        sbn.getUserId(), sbn.getPackageName(), sbn.getKey(), flags);
+            }
+            for (String key : notificationsToGroup) {
+                mCallback.addAutoGroup(key);
+            }
+        }
+    }
+
+    /**
+     * A notification was added that's app grouped, or a notification was removed.
+     * Evaluate whether:
+     * (a) an existing autogroup summary needs updated flags
+     * (b) if we need to remove our autogroup overlay for this notification
+     * (c) we need to remove the autogroup summary
+     *
+     * And updates the internal state of un-app-grouped notifications and their flags
      */
     private void maybeUngroup(StatusBarNotification sbn, boolean notificationGone, int userId) {
-        List<String> notificationsToUnAutogroup = new ArrayList<>();
         boolean removeSummary = false;
+        int summaryFlags = 0;
+        boolean updateSummaryFlags = false;
+        boolean removeAutogroupOverlay = false;
         synchronized (mUngroupedNotifications) {
-            Map<String, LinkedHashSet<String>> ungroupedNotificationsByUser
-                    = mUngroupedNotifications.get(sbn.getUserId());
-            if (ungroupedNotificationsByUser == null || ungroupedNotificationsByUser.size() == 0) {
+            String key = generatePackageKey(sbn.getUserId(), sbn.getPackageName());
+            final ArrayMap<String, Integer> children =
+                    mUngroupedNotifications.getOrDefault(key, new ArrayMap<>());
+            if (children.size() == 0) {
                 return;
             }
-            LinkedHashSet<String> notificationsForPackage
-                    = ungroupedNotificationsByUser.get(sbn.getPackageName());
-            if (notificationsForPackage == null || notificationsForPackage.size() == 0) {
-                return;
-            }
-            if (notificationsForPackage.remove(sbn.getKey())) {
-                if (!notificationGone) {
-                    // Add the current notification to the ungrouping list if it still exists.
-                    notificationsToUnAutogroup.add(sbn.getKey());
+
+            // if this notif was autogrouped and now isn't
+            if (children.containsKey(sbn.getKey())) {
+                // if this notification was contributing flags that aren't covered by other
+                // children to the summary, reevaluate flags for the summary
+                int flags = children.remove(sbn.getKey());
+                // this
+                if (hasAnyFlag(flags, ANY_CHILDREN_FLAGS)) {
+                    updateSummaryFlags = true;
+                    summaryFlags = getAutogroupSummaryFlags(children);
                 }
-            }
-            // If the status change of this notification has brought the number of loose
-            // notifications to zero, remove the summary and un-autogroup.
-            if (notificationsForPackage.size() == 0) {
-                ungroupedNotificationsByUser.remove(sbn.getPackageName());
-                removeSummary = true;
+                // if this notification still exists and has an autogroup overlay, but is now
+                // grouped by the app, clear the overlay
+                if (!notificationGone && sbn.getOverrideGroupKey() != null) {
+                    removeAutogroupOverlay = true;
+                }
+
+                // If there are no more children left to autogroup, remove the summary
+                if (children.size() == 0) {
+                    removeSummary = true;
+                }
             }
         }
         if (removeSummary) {
-            adjustAutogroupingSummary(userId, sbn.getPackageName(), null, false);
-        }
-        if (notificationsToUnAutogroup.size() > 0) {
-            adjustNotificationBundling(notificationsToUnAutogroup, false);
-        }
-    }
-
-    private void adjustAutogroupingSummary(int userId, String packageName, String triggeringKey,
-            boolean summaryNeeded) {
-        if (summaryNeeded) {
-            mCallback.addAutoGroupSummary(userId, packageName, triggeringKey,
-                    getOngoingGroupCount(userId, packageName) > 0);
+            mCallback.removeAutoGroupSummary(userId, sbn.getPackageName());
         } else {
-            mCallback.removeAutoGroupSummary(userId, packageName);
+            if (updateSummaryFlags) {
+                mCallback.updateAutogroupSummary(userId, sbn.getPackageName(), summaryFlags);
+            }
+        }
+        if (removeAutogroupOverlay) {
+            mCallback.removeAutoGroup(sbn.getKey());
         }
     }
 
-    private void adjustNotificationBundling(List<String> keys, boolean group) {
-        for (String key : keys) {
-            if (DEBUG) Log.i(TAG, "Sending grouping adjustment for: " + key + " group? " + group);
-            if (group) {
-                mCallback.addAutoGroup(key);
-            } else {
-                mCallback.removeAutoGroup(key);
-            }
+    @VisibleForTesting
+    int getNotGroupedByAppCount(int userId, String pkg) {
+        synchronized (mUngroupedNotifications) {
+            String key = generatePackageKey(userId, pkg);
+            final ArrayMap<String, Integer> children =
+                    mUngroupedNotifications.getOrDefault(key, new ArrayMap<>());
+            return children.size();
         }
     }
 
     protected interface Callback {
         void addAutoGroup(String key);
         void removeAutoGroup(String key);
-        void addAutoGroupSummary(int userId, String pkg, String triggeringKey,
-                boolean needsOngoingFlag);
+        void addAutoGroupSummary(int userId, String pkg, String triggeringKey, int flags);
         void removeAutoGroupSummary(int user, String pkg);
-        void updateAutogroupSummary(int userId, String pkg, boolean needsOngoingFlag);
+        void updateAutogroupSummary(int userId, String pkg, int flags);
     }
 }
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index 73440b7..12fc263 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -140,34 +140,39 @@
      * The services that have been bound by us. If the service is also connected, it will also
      * be in {@link #mServices}.
      */
+    @GuardedBy("mMutex")
     private final ArrayList<Pair<ComponentName, Integer>> mServicesBound = new ArrayList<>();
+    @GuardedBy("mMutex")
     private final ArraySet<Pair<ComponentName, Integer>> mServicesRebinding = new ArraySet<>();
     // we need these packages to be protected because classes that inherit from it need to see it
     protected final Object mDefaultsLock = new Object();
+    @GuardedBy("mDefaultsLock")
     protected final ArraySet<ComponentName> mDefaultComponents = new ArraySet<>();
+    @GuardedBy("mDefaultsLock")
     protected final ArraySet<String> mDefaultPackages = new ArraySet<>();
 
     // lists the component names of all enabled (and therefore potentially connected)
     // app services for current profiles.
-    private ArraySet<ComponentName> mEnabledServicesForCurrentProfiles
-            = new ArraySet<>();
+    @GuardedBy("mMutex")
+    private final ArraySet<ComponentName> mEnabledServicesForCurrentProfiles = new ArraySet<>();
     // Just the packages from mEnabledServicesForCurrentProfiles
-    private ArraySet<String> mEnabledServicesPackageNames = new ArraySet<>();
+    @GuardedBy("mMutex")
+    private final ArraySet<String> mEnabledServicesPackageNames = new ArraySet<>();
     // Per user id, list of enabled packages that have nevertheless asked not to be run
-    private final android.util.SparseSetArray<ComponentName> mSnoozing =
-            new android.util.SparseSetArray<>();
+    @GuardedBy("mSnoozing")
+    private final SparseSetArray<ComponentName> mSnoozing = new SparseSetArray<>();
 
     // List of approved packages or components (by user, then by primary/secondary) that are
     // allowed to be bound as managed services. A package or component appearing in this list does
     // not mean that we are currently bound to said package/component.
+    @GuardedBy("mApproved")
     protected final ArrayMap<Integer, ArrayMap<Boolean, ArraySet<String>>> mApproved =
             new ArrayMap<>();
-
     // List of packages or components (by user) that are configured to be enabled/disabled
     // explicitly by the user
     @GuardedBy("mApproved")
     protected ArrayMap<Integer, ArraySet<String>> mUserSetServices = new ArrayMap<>();
-
+    @GuardedBy("mApproved")
     protected ArrayMap<Integer, Boolean> mIsUserChanged = new ArrayMap<>();
 
     // True if approved services are stored in xml, not settings.
@@ -262,20 +267,18 @@
     @NonNull
     ArrayMap<Boolean, ArrayList<ComponentName>> resetComponents(String packageName, int userId) {
         // components that we want to enable
-        ArrayList<ComponentName> componentsToEnable =
-                new ArrayList<>(mDefaultComponents.size());
-
+        ArrayList<ComponentName> componentsToEnable;
         // components that were removed
-        ArrayList<ComponentName> disabledComponents =
-                new ArrayList<>(mDefaultComponents.size());
-
+        ArrayList<ComponentName> disabledComponents;
         // all components that are enabled now
-        ArraySet<ComponentName> enabledComponents =
-                new ArraySet<>(getAllowedComponents(userId));
+        ArraySet<ComponentName> enabledComponents = new ArraySet<>(getAllowedComponents(userId));
 
         boolean changed = false;
 
         synchronized (mDefaultsLock) {
+            componentsToEnable = new ArrayList<>(mDefaultComponents.size());
+            disabledComponents = new ArrayList<>(mDefaultComponents.size());
+
             // record all components that are enabled but should not be by default
             for (int i = 0; i < mDefaultComponents.size() && enabledComponents.size() > 0; i++) {
                 ComponentName currentDefault = mDefaultComponents.valueAt(i);
@@ -374,14 +377,14 @@
             }
         }
 
-        pw.println("    All " + getCaption() + "s (" + mEnabledServicesForCurrentProfiles.size()
-                + ") enabled for current profiles:");
-        for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) {
-            if (filter != null && !filter.matches(cmpt)) continue;
-            pw.println("      " + cmpt);
-        }
-
         synchronized (mMutex) {
+            pw.println("    All " + getCaption() + "s (" + mEnabledServicesForCurrentProfiles.size()
+                    + ") enabled for current profiles:");
+            for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) {
+                if (filter != null && !filter.matches(cmpt)) continue;
+                pw.println("      " + cmpt);
+            }
+
             pw.println("    Live " + getCaption() + "s (" + mServices.size() + "):");
             for (ManagedServiceInfo info : mServices) {
                 if (filter != null && !filter.matches(info.component)) continue;
@@ -434,12 +437,12 @@
             }
         }
 
-        for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) {
-            if (filter != null && !filter.matches(cmpt)) continue;
-            cmpt.dumpDebug(proto, ManagedServicesProto.ENABLED);
-        }
 
         synchronized (mMutex) {
+            for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) {
+                if (filter != null && !filter.matches(cmpt)) continue;
+                cmpt.dumpDebug(proto, ManagedServicesProto.ENABLED);
+            }
             for (ManagedServiceInfo info : mServices) {
                 if (filter != null && !filter.matches(info.component)) continue;
                 info.dumpDebug(proto, ManagedServicesProto.LIVE_SERVICES, this);
@@ -677,7 +680,9 @@
                         if (isUserChanged == null) { //NLS
                             userSetComponent = TextUtils.emptyIfNull(userSetComponent);
                         } else { //NAS
-                            mIsUserChanged.put(resolvedUserId, Boolean.valueOf(isUserChanged));
+                            synchronized (mApproved) {
+                                mIsUserChanged.put(resolvedUserId, Boolean.valueOf(isUserChanged));
+                            }
                             userSetComponent = Boolean.valueOf(isUserChanged) ? approved : "";
                         }
                     } else {
@@ -688,7 +693,9 @@
                             if (isUserChanged_Old != null && Boolean.valueOf(isUserChanged_Old)) {
                                 //user_set = true
                                 userSetComponent = approved;
-                                mIsUserChanged.put(resolvedUserId, true);
+                                synchronized (mApproved) {
+                                    mIsUserChanged.put(resolvedUserId, true);
+                                }
                                 needUpgradeUserset = false;
                             } else {
                                 userSetComponent = "";
@@ -724,8 +731,11 @@
     }
 
     void upgradeDefaultsXmlVersion() {
-        // check if any defaults are loaded
-        int defaultsSize = mDefaultComponents.size() + mDefaultPackages.size();
+        int defaultsSize;
+        synchronized (mDefaultsLock) {
+            // check if any defaults are loaded
+            defaultsSize = mDefaultComponents.size() + mDefaultPackages.size();
+        }
         if (defaultsSize == 0) {
             // load defaults from current allowed
             if (this.mApprovalLevel == APPROVAL_BY_COMPONENT) {
@@ -741,8 +751,10 @@
                 }
             }
         }
+        synchronized (mDefaultsLock) {
+            defaultsSize = mDefaultComponents.size() + mDefaultPackages.size();
+        }
         // if no defaults are loaded, then load from config
-        defaultsSize = mDefaultComponents.size() + mDefaultPackages.size();
         if (defaultsSize == 0) {
             loadDefaultsFromConfig();
         }
@@ -806,7 +818,9 @@
     }
 
     protected boolean isComponentEnabledForPackage(String pkg) {
-        return mEnabledServicesPackageNames.contains(pkg);
+        synchronized (mMutex) {
+            return mEnabledServicesPackageNames.contains(pkg);
+        }
     }
 
     protected void setPackageOrComponentEnabled(String pkgOrComponent, int userId,
@@ -959,9 +973,13 @@
     }
 
     public void onPackagesChanged(boolean removingPackage, String[] pkgList, int[] uidList) {
-        if (DEBUG) Slog.d(TAG, "onPackagesChanged removingPackage=" + removingPackage
-                + " pkgList=" + (pkgList == null ? null : Arrays.asList(pkgList))
-                + " mEnabledServicesPackageNames=" + mEnabledServicesPackageNames);
+        if (DEBUG) {
+            synchronized (mMutex) {
+                Slog.d(TAG, "onPackagesChanged removingPackage=" + removingPackage
+                        + " pkgList=" + (pkgList == null ? null : Arrays.asList(pkgList))
+                        + " mEnabledServicesPackageNames=" + mEnabledServicesPackageNames);
+            }
+        }
 
         if (pkgList != null && (pkgList.length > 0)) {
             boolean anyServicesInvolved = false;
@@ -975,7 +993,7 @@
                 }
             }
             for (String pkgName : pkgList) {
-                if (mEnabledServicesPackageNames.contains(pkgName)) {
+                if (isComponentEnabledForPackage(pkgName)) {
                     anyServicesInvolved = true;
                 }
                 if (uidList != null && uidList.length > 0) {
@@ -1299,9 +1317,11 @@
             }
 
             final Set<ComponentName> add = new HashSet<>(userComponents);
-            ArraySet<ComponentName> snoozed = mSnoozing.get(userId);
-            if (snoozed != null) {
-                add.removeAll(snoozed);
+            synchronized (mSnoozing) {
+                ArraySet<ComponentName> snoozed = mSnoozing.get(userId);
+                if (snoozed != null) {
+                    add.removeAll(snoozed);
+                }
             }
 
             componentsToBind.put(userId, add);
@@ -1605,9 +1625,12 @@
         }
     }
 
+    @VisibleForTesting
     boolean isBound(ComponentName cn, int userId) {
         final Pair<ComponentName, Integer> servicesBindingTag = Pair.create(cn, userId);
-        return mServicesBound.contains(servicesBindingTag);
+        synchronized (mMutex) {
+            return mServicesBound.contains(servicesBindingTag);
+        }
     }
 
     protected boolean isBoundOrRebinding(final ComponentName cn, final int userId) {
@@ -1833,7 +1856,9 @@
         public boolean isEnabledForCurrentProfiles() {
             if (this.isSystem) return true;
             if (this.connection == null) return false;
-            return mEnabledServicesForCurrentProfiles.contains(this.component);
+            synchronized (mMutex) {
+                return mEnabledServicesForCurrentProfiles.contains(this.component);
+            }
         }
 
         /**
@@ -1877,7 +1902,9 @@
 
     /** convenience method for looking in mEnabledServicesForCurrentProfiles */
     public boolean isComponentEnabledForCurrentProfiles(ComponentName component) {
-        return mEnabledServicesForCurrentProfiles.contains(component);
+        synchronized (mMutex) {
+            return mEnabledServicesForCurrentProfiles.contains(component);
+        }
     }
 
     public static class UserProfiles {
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 5d81dda..d1d6f5f 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -319,6 +319,7 @@
 import com.android.server.pm.UserManagerInternal;
 import com.android.server.pm.permission.PermissionManagerServiceInternal;
 import com.android.server.policy.PermissionPolicyInternal;
+import com.android.server.powerstats.StatsPullAtomCallbackImpl;
 import com.android.server.statusbar.StatusBarManagerInternal;
 import com.android.server.uri.UriGrantsManagerInternal;
 import com.android.server.utils.Slogf;
@@ -692,6 +693,7 @@
     private NotificationRecordLogger mNotificationRecordLogger;
     private InstanceIdSequence mNotificationInstanceIdSequence;
     private Set<String> mMsgPkgsAllowedAsConvos = new HashSet();
+    private String mDefaultSearchSelectorPkg;
 
     // Broadcast intent receiver for notification permissions review-related intents
     private ReviewNotificationPermissionsReceiver mReviewNotificationPermissionsReceiver;
@@ -902,11 +904,11 @@
      * has the same flag. It will delete the flag otherwise
      * @param userId user id of the autogroup summary
      * @param pkg package of the autogroup summary
-     * @param needsOngoingFlag true if the group has at least one ongoing notification
+     * @param flags the new flags for this summary
      * @param isAppForeground true if the app is currently in the foreground.
      */
     @GuardedBy("mNotificationLock")
-    protected void updateAutobundledSummaryFlags(int userId, String pkg, boolean needsOngoingFlag,
+    protected void updateAutobundledSummaryFlags(int userId, String pkg, int flags,
             boolean isAppForeground) {
         ArrayMap<String, String> summaries = mAutobundledSummaries.get(userId);
         if (summaries == null) {
@@ -921,13 +923,8 @@
             return;
         }
         int oldFlags = summary.getSbn().getNotification().flags;
-        if (needsOngoingFlag) {
-            summary.getSbn().getNotification().flags |= FLAG_ONGOING_EVENT;
-        } else {
-            summary.getSbn().getNotification().flags &= ~FLAG_ONGOING_EVENT;
-        }
-
-        if (summary.getSbn().getNotification().flags != oldFlags) {
+        if (oldFlags != flags) {
+            summary.getSbn().getNotification().flags = flags;
             mHandler.post(new EnqueueNotificationRunnable(userId, summary, isAppForeground,
                     SystemClock.elapsedRealtime()));
         }
@@ -2439,6 +2436,8 @@
 
         mMsgPkgsAllowedAsConvos = Set.of(getStringArrayResource(
                 com.android.internal.R.array.config_notificationMsgPkgsAllowedAsConvos));
+        mDefaultSearchSelectorPkg = getContext().getString(getContext().getResources()
+                .getIdentifier("config_defaultSearchSelectorPackageName", "string", "android"));
 
         mFlagResolver = flagResolver;
 
@@ -2684,9 +2683,14 @@
 
             @Override
             public void addAutoGroupSummary(int userId, String pkg, String triggeringKey,
-                    boolean needsOngoingFlag) {
-                NotificationManagerService.this.addAutoGroupSummary(
-                        userId, pkg, triggeringKey, needsOngoingFlag);
+                    int flags) {
+                NotificationRecord r = createAutoGroupSummary(userId, pkg, triggeringKey, flags);
+                if (r != null) {
+                    final boolean isAppForeground =
+                            mActivityManager.getPackageImportance(pkg) == IMPORTANCE_FOREGROUND;
+                    mHandler.post(new EnqueueNotificationRunnable(userId, r, isAppForeground,
+                            SystemClock.elapsedRealtime()));
+                }
             }
 
             @Override
@@ -2697,11 +2701,11 @@
             }
 
             @Override
-            public void updateAutogroupSummary(int userId, String pkg, boolean needsOngoingFlag) {
+            public void updateAutogroupSummary(int userId, String pkg, int flags) {
                 boolean isAppForeground = pkg != null
                         && mActivityManager.getPackageImportance(pkg) == IMPORTANCE_FOREGROUND;
                 synchronized (mNotificationLock) {
-                    updateAutobundledSummaryFlags(userId, pkg, needsOngoingFlag, isAppForeground);
+                    updateAutobundledSummaryFlags(userId, pkg, flags, isAppForeground);
                 }
             }
         });
@@ -3334,7 +3338,7 @@
             }
 
             checkCallerIsSameApp(pkg);
-            final boolean isSystemToast = isCallerSystemOrPhone()
+            final boolean isSystemToast = isCallerIsSystemOrSystemUi()
                     || PackageManagerService.PLATFORM_PACKAGE_NAME.equals(pkg);
             boolean isAppRenderedToast = (callback != null);
             if (!checkCanEnqueueToast(pkg, callingUid, displayId, isAppRenderedToast,
@@ -5961,19 +5965,6 @@
         r.addAdjustment(adjustment);
     }
 
-    @VisibleForTesting
-    void addAutoGroupSummary(int userId, String pkg, String triggeringKey,
-            boolean needsOngoingFlag) {
-        NotificationRecord r = createAutoGroupSummary(
-                userId, pkg, triggeringKey, needsOngoingFlag);
-        if (r != null) {
-            final boolean isAppForeground =
-                    mActivityManager.getPackageImportance(pkg) == IMPORTANCE_FOREGROUND;
-            mHandler.post(new EnqueueNotificationRunnable(userId, r, isAppForeground,
-                    SystemClock.elapsedRealtime()));
-        }
-    }
-
     // Clears the 'fake' auto-group summary.
     @VisibleForTesting
     @GuardedBy("mNotificationLock")
@@ -5997,7 +5988,7 @@
 
     // Creates a 'fake' summary for a package that has exceeded the solo-notification limit.
     NotificationRecord createAutoGroupSummary(int userId, String pkg, String triggeringKey,
-            boolean needsOngoingFlag) {
+            int flagsToSet) {
         NotificationRecord summaryRecord = null;
         boolean isPermissionFixed = mPermissionHelper.isPermissionFixed(pkg, userId);
         synchronized (mNotificationLock) {
@@ -6007,7 +5998,6 @@
                 // adjustment will post a summary if needed.
                 return null;
             }
-            NotificationChannel channel = notificationRecord.getChannel();
             final StatusBarNotification adjustedSbn = notificationRecord.getSbn();
             userId = adjustedSbn.getUser().getIdentifier();
             int uid =  adjustedSbn.getUid();
@@ -6030,11 +6020,8 @@
                                 .setGroupSummary(true)
                                 .setGroupAlertBehavior(Notification.GROUP_ALERT_CHILDREN)
                                 .setGroup(GroupHelper.AUTOGROUP_KEY)
-                                .setFlag(FLAG_AUTOGROUP_SUMMARY, true)
-                                .setFlag(Notification.FLAG_GROUP_SUMMARY, true)
-                                .setFlag(FLAG_ONGOING_EVENT, needsOngoingFlag)
+                                .setFlag(flagsToSet, true)
                                 .setColor(adjustedSbn.getNotification().color)
-                                .setLocalOnly(true)
                                 .build();
                 summaryNotification.extras.putAll(extras);
                 Intent appIntent = getContext().getPackageManager().getLaunchIntentForPackage(pkg);
@@ -6372,6 +6359,7 @@
      * The private API only accessible to the system process.
      */
     private final NotificationManagerInternal mInternalService = new NotificationManagerInternal() {
+
         @Override
         public NotificationChannel getNotificationChannel(String pkg, int uid, String
                 channelId) {
@@ -6949,7 +6937,12 @@
      */
     private boolean canBeNonDismissible(ApplicationInfo ai, Notification notification) {
         return notification.isMediaNotification() || isEnterpriseExempted(ai)
-                || isCallNotification(ai.packageName, ai.uid, notification);
+                || isCallNotification(ai.packageName, ai.uid, notification)
+                || isDefaultSearchSelectorPackage(ai.packageName);
+    }
+
+    private boolean isDefaultSearchSelectorPackage(String pkg) {
+        return Objects.equals(mDefaultSearchSelectorPkg, pkg);
     }
 
     private boolean isEnterpriseExempted(ApplicationInfo ai) {
@@ -7827,18 +7820,17 @@
                     if (notification.getSmallIcon() != null) {
                         StatusBarNotification oldSbn = (old != null) ? old.getSbn() : null;
                         mListeners.notifyPostedLocked(r, old);
-                        if ((oldSbn == null || !Objects.equals(oldSbn.getGroup(), n.getGroup()))
-                                && !isCritical(r)) {
-                            mHandler.post(() -> {
-                                synchronized (mNotificationLock) {
-                                    mGroupHelper.onNotificationPosted(
-                                            n, hasAutoGroupSummaryLocked(n));
-                                }
-                            });
-                        } else if (oldSbn != null) {
-                            final NotificationRecord finalRecord = r;
-                            mHandler.post(() ->
-                                    mGroupHelper.onNotificationUpdated(finalRecord.getSbn()));
+                        if (oldSbn == null
+                                || !Objects.equals(oldSbn.getGroup(), n.getGroup())
+                                || oldSbn.getNotification().flags != n.getNotification().flags) {
+                            if (!isCritical(r)) {
+                                mHandler.post(() -> {
+                                    synchronized (mNotificationLock) {
+                                        mGroupHelper.onNotificationPosted(
+                                                n, hasAutoGroupSummaryLocked(n));
+                                    }
+                                });
+                            }
                         }
                     } else {
                         Slog.e(TAG, "Not posting notification without small icon: " + notification);
@@ -10812,7 +10804,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;
 
@@ -10930,9 +10923,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);
+                    }
                 }
             }
         }
@@ -10941,31 +10936,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);
+                    }
                 }
             }
         }
@@ -11013,7 +11011,9 @@
                     }
                     NotificationListenerFilter nlf =
                             new NotificationListenerFilter(approved, disallowedPkgs);
-                    mRequestedNotificationListeners.put(Pair.create(cn, userId), nlf);
+                    synchronized (mRequestedNotificationListeners) {
+                        mRequestedNotificationListeners.put(Pair.create(cn, userId), nlf);
+                    }
                 }
             }
         }
@@ -11021,72 +11021,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/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java
index f733199..2460ce5 100644
--- a/services/core/java/com/android/server/notification/PreferencesHelper.java
+++ b/services/core/java/com/android/server/notification/PreferencesHelper.java
@@ -48,6 +48,7 @@
 import android.content.pm.ParceledListSlice;
 import android.content.pm.UserInfo;
 import android.metrics.LogMaker;
+import android.net.Uri;
 import android.os.Binder;
 import android.os.Build;
 import android.os.UserHandle;
@@ -60,6 +61,7 @@
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.IntArray;
+import android.util.Log;
 import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseBooleanArray;
@@ -387,7 +389,8 @@
                 NotificationChannel channel = new NotificationChannel(
                         id, channelName, channelImportance);
                 if (forRestore) {
-                    channel.populateFromXmlForRestore(parser, mContext);
+                    final boolean pkgInstalled = r.uid != UNKNOWN_UID;
+                    channel.populateFromXmlForRestore(parser, pkgInstalled, mContext);
                 } else {
                     channel.populateFromXml(parser);
                 }
@@ -2412,6 +2415,21 @@
                         mRestoredWithoutUids.remove(unrestoredPackageKey(pkg, changeUserId));
                         synchronized (mPackagePreferences) {
                             mPackagePreferences.put(packagePreferencesKey(r.pkg, r.uid), r);
+
+                            // Try to restore any unrestored sound resources
+                            for (NotificationChannel channel : r.channels.values()) {
+                                if (!channel.isSoundRestored()) {
+                                    Uri uri = channel.getSound();
+                                    Uri restoredUri = channel.restoreSoundUri(mContext, uri, true);
+                                    if (Settings.System.DEFAULT_NOTIFICATION_URI.equals(
+                                            restoredUri)) {
+                                        Log.w(TAG,
+                                                "Could not restore sound: " + uri + " for channel: "
+                                                        + channel);
+                                    }
+                                    channel.setSound(restoredUri, channel.getAudioAttributes());
+                                }
+                            }
                         }
                         if (r.migrateToPm) {
                             try {
diff --git a/services/core/java/com/android/server/pm/BroadcastHelper.java b/services/core/java/com/android/server/pm/BroadcastHelper.java
index c1171fa..0205280 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, true)
+            && !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/DexOptHelper.java b/services/core/java/com/android/server/pm/DexOptHelper.java
index 064be7c..39cd888 100644
--- a/services/core/java/com/android/server/pm/DexOptHelper.java
+++ b/services/core/java/com/android/server/pm/DexOptHelper.java
@@ -745,6 +745,9 @@
         applyPackageFilter(snapshot, remainingPredicate, result, remainingPkgSettings, sortTemp,
                 packageManagerService);
 
+        // Make sure the system server isn't in the result, because it can never be dexopted here.
+        result.removeIf(pkgSetting -> PLATFORM_PACKAGE_NAME.equals(pkgSetting.getPackageName()));
+
         if (debug) {
             Log.i(TAG, "Packages to be dexopted: " + packagesToString(result));
             Log.i(TAG, "Packages skipped from dexopt: " + packagesToString(remainingPkgSettings));
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 596e9b9..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);
         }
@@ -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*/,
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index e4e3a9d..b5108af 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -2356,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();
 
@@ -5156,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..ef7d413 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -24,6 +24,7 @@
 import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET;
 
 import static com.android.server.LocalManagerRegistry.ManagerNotFoundException;
+import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;
 
 import android.accounts.IAccountManager;
 import android.annotation.NonNull;
@@ -124,10 +125,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 +351,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()) {
@@ -1950,6 +1955,8 @@
         List<String> packageNames = null;
         if (allPackages) {
             packageNames = mInterface.getAllPackages();
+            // Compiling the system server is only supported from odrefresh, so skip it.
+            packageNames.removeIf(packageName -> PLATFORM_PACKAGE_NAME.equals(packageName));
         } else {
             String packageName = getNextArg();
             if (packageName == null) {
@@ -3541,6 +3548,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/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/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 73be549..5f8efe2 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -2641,6 +2641,7 @@
 
     private void setUserRestrictionInner(int userId, @NonNull String key, boolean value) {
         if (!UserRestrictionsUtils.isValidRestriction(key)) {
+            Slog.e(LOG_TAG, "Setting invalid restriction " + key);
             return;
         }
         synchronized (mRestrictionsLock) {
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/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
index e5e32f0..4d2b119 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -206,8 +206,6 @@
     static {
         SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS);
         SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS_BACKGROUND);
-        SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE);
-        SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND);
     }
 
     private static final Set<String> STORAGE_PERMISSIONS = new ArraySet<>();
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index c5f939a..297ad73 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -1332,9 +1332,7 @@
                     // Bg location is one-off runtime modifier permission and has no app op
                     if (sPlatformPermissions.containsKey(permission)
                             && !Manifest.permission.ACCESS_BACKGROUND_LOCATION.equals(permission)
-                            && !Manifest.permission.BODY_SENSORS_BACKGROUND.equals(permission)
-                            && !Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND
-                            .equals(permission)) {
+                            && !Manifest.permission.BODY_SENSORS_BACKGROUND.equals(permission)) {
                         Slog.wtf(LOG_TAG, "Platform runtime permission " + permission
                                 + " with no app op defined!");
                     }
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
index cc2c9ad..3492b26 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
@@ -23,6 +23,7 @@
 import static android.app.AppOpsManager.MODE_ALLOWED;
 import static android.app.AppOpsManager.MODE_ERRORED;
 import static android.content.pm.PackageInstaller.SessionParams.PERMISSION_STATE_DEFAULT;
+import static android.content.pm.PackageInstaller.SessionParams.PERMISSION_STATE_DENIED;
 import static android.content.pm.PackageInstaller.SessionParams.PERMISSION_STATE_GRANTED;
 import static android.content.pm.PackageManager.FLAGS_PERMISSION_RESTRICTION_ANY_EXEMPT;
 import static android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION;
@@ -3655,6 +3656,26 @@
 
         for (String permission : pkg.getRequestedPermissions()) {
             Integer permissionState = permissionStates.get(permission);
+
+            if (Objects.equals(permission, Manifest.permission.USE_FULL_SCREEN_INTENT)
+                    && permissionState == null) {
+                final PackageStateInternal ps;
+                final long token = Binder.clearCallingIdentity();
+                try {
+                    ps = mPackageManagerInt.getPackageStateInternal(pkg.getPackageName());
+                } finally {
+                    Binder.restoreCallingIdentity(token);
+                }
+                final String[] useFullScreenIntentPackageNames =
+                        mContext.getResources().getStringArray(
+                                com.android.internal.R.array.config_useFullScreenIntentPackages);
+                final boolean canUseFullScreenIntent = (ps != null && ps.isSystem())
+                        || ArrayUtils.contains(useFullScreenIntentPackageNames,
+                                pkg.getPackageName());
+                permissionState = canUseFullScreenIntent ? PERMISSION_STATE_GRANTED
+                        : PERMISSION_STATE_DENIED;
+            }
+
             if (permissionState == null || permissionState == PERMISSION_STATE_DEFAULT) {
                 continue;
             }
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/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 8165958..aeadcd5 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -222,6 +222,7 @@
 import com.android.server.policy.keyguard.KeyguardStateMonitor.StateCallback;
 import com.android.server.statusbar.StatusBarManagerInternal;
 import com.android.server.vr.VrManagerInternal;
+import com.android.server.wallpaper.WallpaperManagerInternal;
 import com.android.server.wm.ActivityTaskManagerInternal;
 import com.android.server.wm.DisplayPolicy;
 import com.android.server.wm.DisplayRotation;
@@ -412,6 +413,9 @@
     SensorPrivacyManager mSensorPrivacyManager;
     DisplayManager mDisplayManager;
     DisplayManagerInternal mDisplayManagerInternal;
+
+    private WallpaperManagerInternal mWallpaperManagerInternal;
+
     boolean mPreloadedRecentApps;
     final Object mServiceAcquireLock = new Object();
     Vibrator mVibrator; // Vibrator for giving feedback of orientation changes
@@ -706,7 +710,7 @@
                     final int deviceId = msg.arg1;
                     final Long eventTime = (Long) msg.obj;
                     launchAssistAction(null /* hint */, deviceId, eventTime,
-                            AssistUtils.INVOCATION_TYPE_UNKNOWN);
+                            AssistUtils.INVOCATION_TYPE_ASSIST_BUTTON);
                     break;
                 case MSG_LAUNCH_VOICE_ASSIST_WITH_WAKE_LOCK:
                     launchVoiceAssistWithWakeLock();
@@ -3480,6 +3484,11 @@
                     interceptScreenshotChord(SCREENSHOT_KEY_OTHER, 0 /*pressDelay*/);
                 }
                 return true;
+            case KeyEvent.KEYCODE_ESCAPE:
+                if (down && repeatCount == 0) {
+                    mContext.closeSystemDialogs();
+                }
+                return true;
         }
 
         return false;
@@ -4567,6 +4576,12 @@
 
             case KeyEvent.KEYCODE_BACK:
                 return mWakeOnBackKeyPress;
+
+            case KeyEvent.KEYCODE_STYLUS_BUTTON_PRIMARY:
+            case KeyEvent.KEYCODE_STYLUS_BUTTON_SECONDARY:
+            case KeyEvent.KEYCODE_STYLUS_BUTTON_TERTIARY:
+            case KeyEvent.KEYCODE_STYLUS_BUTTON_TAIL:
+                return mStylusButtonsEnabled;
         }
 
         return true;
@@ -5016,11 +5031,34 @@
         return bootCompleted ? mKeyguardDrawnTimeout : 5000;
     }
 
+    @Nullable
+    private WallpaperManagerInternal getWallpaperManagerInternal() {
+        if (mWallpaperManagerInternal == null) {
+            mWallpaperManagerInternal = LocalServices.getService(WallpaperManagerInternal.class);
+        }
+        return mWallpaperManagerInternal;
+    }
+
+    private void reportScreenTurningOnToWallpaper(int displayId) {
+        WallpaperManagerInternal wallpaperManagerInternal = getWallpaperManagerInternal();
+        if (wallpaperManagerInternal != null) {
+            wallpaperManagerInternal.onScreenTurningOn(displayId);
+        }
+    }
+
+    private void reportScreenTurnedOnToWallpaper(int displayId) {
+        WallpaperManagerInternal wallpaperManagerInternal = getWallpaperManagerInternal();
+        if (wallpaperManagerInternal != null) {
+            wallpaperManagerInternal.onScreenTurnedOn(displayId);
+        }
+    }
+
     // Called on the DisplayManager's DisplayPowerController thread.
     @Override
     public void screenTurningOn(int displayId, final ScreenOnListener screenOnListener) {
         if (DEBUG_WAKEUP) Slog.i(TAG, "Display " + displayId + " turning on...");
 
+        reportScreenTurningOnToWallpaper(displayId);
         if (displayId == DEFAULT_DISPLAY) {
             Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenTurningOn",
                     0 /* cookie */);
@@ -5061,6 +5099,8 @@
     public void screenTurnedOn(int displayId) {
         if (DEBUG_WAKEUP) Slog.i(TAG, "Display " + displayId + " turned on...");
 
+        reportScreenTurnedOnToWallpaper(displayId);
+
         if (displayId != DEFAULT_DISPLAY) {
             return;
         }
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 2e8a150..e392c24 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -667,15 +667,15 @@
     // but the DreamService has not yet been told to start (it's an async process).
     private boolean mDozeStartInProgress;
 
-    // Whether to keep dreaming when the device is undocked.
-    private boolean mKeepDreamingWhenUndocked;
+    // Whether to keep dreaming when the device is unplugging.
+    private boolean mKeepDreamingWhenUnplugging;
 
     private final class DreamManagerStateListener implements
             DreamManagerInternal.DreamManagerStateListener {
         @Override
-        public void onKeepDreamingWhenUndockedChanged(boolean keepDreaming) {
+        public void onKeepDreamingWhenUnpluggingChanged(boolean keepDreaming) {
             synchronized (mLock) {
-                mKeepDreamingWhenUndocked = keepDreaming;
+                mKeepDreamingWhenUnplugging = keepDreaming;
             }
         }
     }
@@ -2504,14 +2504,12 @@
             return false;
         }
 
-        // Don't wake when undocking while dreaming if configured not to.
-        if (mKeepDreamingWhenUndocked
+        // Don't wake when unplugging while dreaming if configured not to.
+        if (mKeepDreamingWhenUnplugging
                 && getGlobalWakefulnessLocked() == WAKEFULNESS_DREAMING
-                && wasPowered && !mIsPowered
-                && oldPlugType == BatteryManager.BATTERY_PLUGGED_DOCK) {
+                && wasPowered && !mIsPowered) {
             return false;
         }
-
         // Don't wake when undocked from wireless charger.
         // See WirelessChargerDetector for justification.
         if (wasPowered && !mIsPowered
@@ -4477,7 +4475,7 @@
                     + mWakeUpWhenPluggedOrUnpluggedInTheaterModeConfig);
             pw.println("  mTheaterModeEnabled="
                     + mTheaterModeEnabled);
-            pw.println("  mKeepDreamingWhenUndocked=" + mKeepDreamingWhenUndocked);
+            pw.println("  mKeepDreamingWhenUnplugging=" + mKeepDreamingWhenUnplugging);
             pw.println("  mSuspendWhenScreenOffDueToProximityConfig="
                     + mSuspendWhenScreenOffDueToProximityConfig);
             pw.println("  mDreamsSupportedConfig=" + mDreamsSupportedConfig);
diff --git a/services/core/java/com/android/server/power/ShutdownCheckPoints.java b/services/core/java/com/android/server/power/ShutdownCheckPoints.java
index 32f1bcf..546dc81 100644
--- a/services/core/java/com/android/server/power/ShutdownCheckPoints.java
+++ b/services/core/java/com/android/server/power/ShutdownCheckPoints.java
@@ -295,11 +295,18 @@
         @Nullable
         String getProcessName() {
             try {
-                List<ActivityManager.RunningAppProcessInfo> runningProcesses =
-                        mActivityManager.getRunningAppProcesses();
-                for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
-                    if (processInfo.pid == mCallerProcessId) {
-                        return processInfo.processName;
+                List<ActivityManager.RunningAppProcessInfo> runningProcesses = null;
+                if (mActivityManager != null) {
+                    runningProcesses = mActivityManager.getRunningAppProcesses();
+                } else {
+                    Slog.v(TAG, "No ActivityManager available to find process name with pid="
+                            + mCallerProcessId);
+                }
+                if (runningProcesses != null) {
+                    for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
+                        if (processInfo.pid == mCallerProcessId) {
+                            return processInfo.processName;
+                        }
                     }
                 }
             } catch (RemoteException e) {
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index c2d4ac6..b1430e7 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -703,17 +703,20 @@
             // vibrate before shutting down
             Vibrator vibrator = new SystemVibrator(context);
             try {
-                vibrator.vibrate(SHUTDOWN_VIBRATE_MS, VIBRATION_ATTRIBUTES);
+                if (vibrator.hasVibrator()) {
+                    vibrator.vibrate(SHUTDOWN_VIBRATE_MS, VIBRATION_ATTRIBUTES);
+                    // vibrator is asynchronous so we need to wait to avoid shutting down too soon.
+                    try {
+                        Thread.sleep(SHUTDOWN_VIBRATE_MS);
+                    } catch (InterruptedException unused) {
+                        // this is not critical and does not require logging
+                    }
+                }
             } catch (Exception e) {
                 // Failure to vibrate shouldn't interrupt shutdown.  Just log it.
                 Log.w(TAG, "Failed to vibrate during shutdown.", e);
             }
 
-            // vibrator is asynchronous so we need to wait to avoid shutting down too soon.
-            try {
-                Thread.sleep(SHUTDOWN_VIBRATE_MS);
-            } catch (InterruptedException unused) {
-            }
         }
         // Shutdown power
         Log.i(TAG, "Performing low-level shutdown...");
diff --git a/services/core/java/com/android/server/power/stats/CpuWakeupStats.java b/services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java
similarity index 89%
rename from services/core/java/com/android/server/power/stats/CpuWakeupStats.java
rename to services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java
index 231ffc6..eb6d28e 100644
--- a/services/core/java/com/android/server/power/stats/CpuWakeupStats.java
+++ b/services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java
@@ -14,9 +14,12 @@
  * limitations under the License.
  */
 
-package com.android.server.power.stats;
+package com.android.server.power.stats.wakeups;
 
 import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_ALARM;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_SENSOR;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER;
 import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_UNKNOWN;
 import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_WIFI;
 
@@ -53,9 +56,11 @@
  */
 public class CpuWakeupStats {
     private static final String TAG = "CpuWakeupStats";
-
     private static final String SUBSYSTEM_ALARM_STRING = "Alarm";
-    private static final String SUBSYSTEM_ALARM_WIFI = "Wifi";
+    private static final String SUBSYSTEM_WIFI_STRING = "Wifi";
+    private static final String SUBSYSTEM_SOUND_TRIGGER_STRING = "Sound_trigger";
+    private static final String SUBSYSTEM_SENSOR_STRING = "Sensor";
+    private static final String SUBSYSTEM_CELLULAR_DATA_STRING = "Cellular_data";
     private static final String TRACE_TRACK_WAKEUP_ATTRIBUTION = "wakeup_attribution";
     @VisibleForTesting
     static final long WAKEUP_REASON_HALF_WINDOW_MS = 500;
@@ -91,12 +96,28 @@
         mConfig.register(new HandlerExecutor(mHandler));
     }
 
+    private static int typeToStatsType(int wakeupType) {
+        switch (wakeupType) {
+            case Wakeup.TYPE_ABNORMAL:
+                return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__TYPE__TYPE_ABNORMAL;
+            case Wakeup.TYPE_IRQ:
+                return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__TYPE__TYPE_IRQ;
+        }
+        return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__TYPE__TYPE_UNKNOWN;
+    }
+
     private static int subsystemToStatsReason(int subsystem) {
         switch (subsystem) {
             case CPU_WAKEUP_SUBSYSTEM_ALARM:
                 return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__ALARM;
             case CPU_WAKEUP_SUBSYSTEM_WIFI:
                 return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__WIFI;
+            case CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER:
+                return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__SOUND_TRIGGER;
+            case CPU_WAKEUP_SUBSYSTEM_SENSOR:
+                return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__SENSOR;
+            case CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA:
+                return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__CELLULAR_DATA;
         }
         return FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__REASON__UNKNOWN;
     }
@@ -144,7 +165,7 @@
                 }
             }
             FrameworkStatsLog.write(FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED,
-                    FrameworkStatsLog.KERNEL_WAKEUP_ATTRIBUTED__TYPE__TYPE_IRQ,
+                    typeToStatsType(wakeupToLog.mType),
                     subsystemToStatsReason(subsystem),
                     uids,
                     wakeupToLog.mElapsedMillis,
@@ -524,8 +545,14 @@
         switch (rawSubsystem) {
             case SUBSYSTEM_ALARM_STRING:
                 return CPU_WAKEUP_SUBSYSTEM_ALARM;
-            case SUBSYSTEM_ALARM_WIFI:
+            case SUBSYSTEM_WIFI_STRING:
                 return CPU_WAKEUP_SUBSYSTEM_WIFI;
+            case SUBSYSTEM_SOUND_TRIGGER_STRING:
+                return CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER;
+            case SUBSYSTEM_SENSOR_STRING:
+                return CPU_WAKEUP_SUBSYSTEM_SENSOR;
+            case SUBSYSTEM_CELLULAR_DATA_STRING:
+                return CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA;
         }
         return CPU_WAKEUP_SUBSYSTEM_UNKNOWN;
     }
@@ -535,25 +562,47 @@
             case CPU_WAKEUP_SUBSYSTEM_ALARM:
                 return SUBSYSTEM_ALARM_STRING;
             case CPU_WAKEUP_SUBSYSTEM_WIFI:
-                return SUBSYSTEM_ALARM_WIFI;
+                return SUBSYSTEM_WIFI_STRING;
+            case CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER:
+                return SUBSYSTEM_SOUND_TRIGGER_STRING;
+            case CPU_WAKEUP_SUBSYSTEM_SENSOR:
+                return SUBSYSTEM_SENSOR_STRING;
+            case CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA:
+                return SUBSYSTEM_CELLULAR_DATA_STRING;
             case CPU_WAKEUP_SUBSYSTEM_UNKNOWN:
                 return "Unknown";
         }
         return "N/A";
     }
 
-    private static final class Wakeup {
+    @VisibleForTesting
+    static final class Wakeup {
         private static final String PARSER_TAG = "CpuWakeupStats.Wakeup";
         private static final String ABORT_REASON_PREFIX = "Abort";
-        private static final Pattern sIrqPattern = Pattern.compile("^(\\d+)\\s+(\\S+)");
+        private static final Pattern sIrqPattern = Pattern.compile("^(\\-?\\d+)\\s+(\\S+)");
+
+        /**
+         * Classical interrupts, which arrive on a dedicated GPIO pin into the main CPU.
+         * Sometimes, when multiple IRQs happen close to each other, they may get batched together.
+         */
+        static final int TYPE_IRQ = 1;
+
+        /**
+         * Non-IRQ wakeups. The exact mechanism for these is unknown, except that these explicitly
+         * do not use an interrupt line or a GPIO pin.
+         */
+        static final int TYPE_ABNORMAL = 2;
+
+        int mType;
         long mElapsedMillis;
         long mUptimeMillis;
         IrqDevice[] mDevices;
 
-        private Wakeup(IrqDevice[] devices, long elapsedMillis, long uptimeMillis) {
+        private Wakeup(int type, IrqDevice[] devices, long elapsedMillis, long uptimeMillis) {
+            mType = type;
+            mDevices = devices;
             mElapsedMillis = elapsedMillis;
             mUptimeMillis = uptimeMillis;
-            mDevices = devices;
         }
 
         static Wakeup parseWakeup(String rawReason, long elapsedMillis, long uptimeMillis) {
@@ -563,6 +612,7 @@
                 return null;
             }
 
+            int type = TYPE_IRQ;
             int parsedDeviceCount = 0;
             final IrqDevice[] parsedDevices = new IrqDevice[components.length];
 
@@ -574,6 +624,10 @@
                     try {
                         line = Integer.parseInt(matcher.group(1));
                         device = matcher.group(2);
+                        if (line < 0) {
+                            // Assuming that IRQ wakeups cannot come batched with non-IRQ wakeups.
+                            type = TYPE_ABNORMAL;
+                        }
                     } catch (NumberFormatException e) {
                         Slog.e(PARSER_TAG,
                                 "Exception while parsing device names from part: " + component, e);
@@ -585,15 +639,16 @@
             if (parsedDeviceCount == 0) {
                 return null;
             }
-            return new Wakeup(Arrays.copyOf(parsedDevices, parsedDeviceCount), elapsedMillis,
+            return new Wakeup(type, Arrays.copyOf(parsedDevices, parsedDeviceCount), elapsedMillis,
                     uptimeMillis);
         }
 
         @Override
         public String toString() {
             return "Wakeup{"
-                    + "mElapsedMillis=" + mElapsedMillis
-                    + ", mUptimeMillis=" + TimeUtils.formatDuration(mUptimeMillis)
+                    + "mType=" + mType
+                    + ", mElapsedMillis=" + mElapsedMillis
+                    + ", mUptimeMillis=" + mUptimeMillis
                     + ", mDevices=" + Arrays.toString(mDevices)
                     + '}';
         }
diff --git a/services/core/java/com/android/server/power/stats/IrqDeviceMap.java b/services/core/java/com/android/server/power/stats/wakeups/IrqDeviceMap.java
similarity index 98%
rename from services/core/java/com/android/server/power/stats/IrqDeviceMap.java
rename to services/core/java/com/android/server/power/stats/wakeups/IrqDeviceMap.java
index 091d18e..8644f72 100644
--- a/services/core/java/com/android/server/power/stats/IrqDeviceMap.java
+++ b/services/core/java/com/android/server/power/stats/wakeups/IrqDeviceMap.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.server.power.stats;
+package com.android.server.power.stats.wakeups;
 
 import android.annotation.XmlRes;
 import android.content.Context;
diff --git a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java
index 7beb1ed..0ca5603 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;
@@ -105,36 +110,42 @@
     @Override
     public int onHealthCheckFailed(@Nullable VersionedPackage failedPackage,
             @FailureReasons int failureReason, int mitigationCount) {
-        // For native crashes, we will roll back any available rollbacks
+        boolean anyRollbackAvailable = !mContext.getSystemService(RollbackManager.class)
+                .getAvailableRollbacks().isEmpty();
+        int impact = PackageHealthObserverImpact.USER_IMPACT_LEVEL_0;
+
         if (failureReason == PackageWatchdog.FAILURE_REASON_NATIVE_CRASH
-                && !mContext.getSystemService(RollbackManager.class)
-                .getAvailableRollbacks().isEmpty()) {
-            return PackageHealthObserverImpact.USER_IMPACT_MEDIUM;
-        }
-        if (getAvailableRollback(failedPackage) == null) {
-            // Don't handle the notification, no rollbacks available for the package
-            return PackageHealthObserverImpact.USER_IMPACT_NONE;
-        } else {
+                && anyRollbackAvailable) {
+            // 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 (getAvailableRollback(failedPackage) != null) {
             // Rollback is available, we may get a callback into #execute
-            return PackageHealthObserverImpact.USER_IMPACT_MEDIUM;
+            impact = PackageHealthObserverImpact.USER_IMPACT_LEVEL_60;
+        } else if (anyRollbackAvailable) {
+            // If any rollbacks are available, we will commit them
+            impact = PackageHealthObserverImpact.USER_IMPACT_LEVEL_70;
         }
+
+        return impact;
     }
 
     @Override
     public boolean execute(@Nullable VersionedPackage failedPackage,
             @FailureReasons int rollbackReason, int mitigationCount) {
         if (rollbackReason == PackageWatchdog.FAILURE_REASON_NATIVE_CRASH) {
-            mHandler.post(() -> rollbackAll());
+            mHandler.post(() -> rollbackAll(rollbackReason));
             return true;
         }
 
         RollbackInfo rollback = getAvailableRollback(failedPackage);
-        if (rollback == null) {
-            Slog.w(TAG, "Expected rollback but no valid rollback found for " + failedPackage);
-            return false;
+        if (rollback != null) {
+            mHandler.post(() -> rollbackPackage(rollback, failedPackage, rollbackReason));
+        } else {
+            mHandler.post(() -> rollbackAll(rollbackReason));
         }
-        mHandler.post(() -> rollbackPackage(rollback, failedPackage, rollbackReason));
-        // Assume rollback executed successfully
+
+        // Assume rollbacks executed successfully
         return true;
     }
 
@@ -143,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());
     }
@@ -415,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");
                 }
             }
@@ -468,7 +504,7 @@
     }
 
     @WorkerThread
-    private void rollbackAll() {
+    private void rollbackAll(@FailureReasons int rollbackReason) {
         assertInWorkerThread();
         RollbackManager rollbackManager = mContext.getSystemService(RollbackManager.class);
         List<RollbackInfo> rollbacks = rollbackManager.getAvailableRollbacks();
@@ -487,7 +523,7 @@
 
         for (RollbackInfo rollback : rollbacks) {
             VersionedPackage sample = rollback.getPackages().get(0).getVersionRolledBackFrom();
-            rollbackPackage(rollback, sample, PackageWatchdog.FAILURE_REASON_NATIVE_CRASH);
+            rollbackPackage(rollback, sample, rollbackReason);
         }
     }
 }
diff --git a/services/core/java/com/android/server/security/rkp/RemoteProvisioningService.java b/services/core/java/com/android/server/security/rkp/RemoteProvisioningService.java
index cd1a968..97e4636 100644
--- a/services/core/java/com/android/server/security/rkp/RemoteProvisioningService.java
+++ b/services/core/java/com/android/server/security/rkp/RemoteProvisioningService.java
@@ -19,14 +19,18 @@
 import android.content.Context;
 import android.os.Binder;
 import android.os.OutcomeReceiver;
+import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.security.rkp.IGetRegistrationCallback;
 import android.security.rkp.IRemoteProvisioning;
 import android.security.rkp.service.RegistrationProxy;
 import android.util.Log;
 
+import com.android.internal.util.DumpUtils;
 import com.android.server.SystemService;
 
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
 import java.time.Duration;
 import java.util.concurrent.Executor;
 
@@ -97,5 +101,18 @@
                 Binder.restoreCallingIdentity(callingIdentity);
             }
         }
+
+        @Override
+        protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+            if (!DumpUtils.checkDumpPermission(getContext(), TAG, pw)) return;
+            new RemoteProvisioningShellCommand().dump(pw);
+        }
+
+        @Override
+        public int handleShellCommand(ParcelFileDescriptor in, ParcelFileDescriptor out,
+                ParcelFileDescriptor err, String[] args) {
+            return new RemoteProvisioningShellCommand().exec(this, in.getFileDescriptor(),
+                    out.getFileDescriptor(), err.getFileDescriptor(), args);
+        }
     }
 }
diff --git a/services/core/java/com/android/server/security/rkp/RemoteProvisioningShellCommand.java b/services/core/java/com/android/server/security/rkp/RemoteProvisioningShellCommand.java
new file mode 100644
index 0000000..71eca69
--- /dev/null
+++ b/services/core/java/com/android/server/security/rkp/RemoteProvisioningShellCommand.java
@@ -0,0 +1,250 @@
+/*
+ * 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.security.rkp;
+
+import android.hardware.security.keymint.DeviceInfo;
+import android.hardware.security.keymint.IRemotelyProvisionedComponent;
+import android.hardware.security.keymint.MacedPublicKey;
+import android.hardware.security.keymint.ProtectedData;
+import android.hardware.security.keymint.RpcHardwareInfo;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.ShellCommand;
+import android.util.IndentingPrintWriter;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintWriter;
+import java.util.Base64;
+
+import co.nstant.in.cbor.CborDecoder;
+import co.nstant.in.cbor.CborEncoder;
+import co.nstant.in.cbor.CborException;
+import co.nstant.in.cbor.model.Array;
+import co.nstant.in.cbor.model.ByteString;
+import co.nstant.in.cbor.model.DataItem;
+import co.nstant.in.cbor.model.Map;
+import co.nstant.in.cbor.model.SimpleValue;
+import co.nstant.in.cbor.model.UnsignedInteger;
+
+class RemoteProvisioningShellCommand extends ShellCommand {
+    private static final String USAGE = "usage: cmd remote_provisioning SUBCOMMAND [ARGS]\n"
+            + "help\n"
+            + "  Show this message.\n"
+            + "dump\n"
+            + "  Dump service diagnostics.\n"
+            + "list [--min-version MIN_VERSION]\n"
+            + "  List the names of the IRemotelyProvisionedComponent instances.\n"
+            + "csr [--challenge CHALLENGE] NAME\n"
+            + "  Generate and print a base64-encoded CSR from the named\n"
+            + "  IRemotelyProvisionedComponent. A base64-encoded challenge can be provided,\n"
+            + "  or else it defaults to an empty challenge.\n";
+
+    @VisibleForTesting
+    static final String EEK_ED25519_BASE64 = "goRDoQEnoFgqpAEBAycgBiFYIJm57t1e5FL2hcZMYtw+YatXSH11N"
+            + "ymtdoAy0rPLY1jZWEAeIghLpLekyNdOAw7+uK8UTKc7b6XN3Np5xitk/pk5r3bngPpmAIUNB5gqrJFcpyUUS"
+            + "QY0dcqKJ3rZ41pJ6wIDhEOhASegWE6lAQECWCDQrsEVyirPc65rzMvRlh1l6LHd10oaN7lDOpfVmd+YCAM4G"
+            + "CAEIVggvoXnRsSjQlpA2TY6phXQLFh+PdwzAjLS/F4ehyVfcmBYQJvPkOIuS6vRGLEOjl0gJ0uEWP78MpB+c"
+            + "gWDvNeCvvpkeC1UEEvAMb9r6B414vAtzmwvT/L1T6XUg62WovGHWAQ=";
+
+    @VisibleForTesting
+    static final String EEK_P256_BASE64 = "goRDoQEmoFhNpQECAyYgASFYIPcUituX9MxT79JkEcTjdR9mH6RxDGzP"
+            + "+glGgHSHVPKtIlggXn9b9uzk9hnM/xM3/Q+hyJPbGAZ2xF3m12p3hsMtr49YQC+XjkL7vgctlUeFR5NAsB/U"
+            + "m0ekxESp8qEHhxDHn8sR9L+f6Dvg5zRMFfx7w34zBfTRNDztAgRgehXgedOK/ySEQ6EBJqBYcaYBAgJYIDVz"
+            + "tz+gioCJsSZn6ct8daGvAmH8bmUDkTvTS30UlD5GAzgYIAEhWCDgQc8vDzQPHDMsQbDP1wwwVTXSHmpHE0su"
+            + "0UiWfiScaCJYIB/ORcX7YbqBIfnlBZubOQ52hoZHuB4vRfHOr9o/gGjbWECMs7p+ID4ysGjfYNEdffCsOI5R"
+            + "vP9s4Wc7Snm8Vnizmdh8igfY2rW1f3H02GvfMyc0e2XRKuuGmZirOrSAqr1Q";
+
+    private static final int ERROR = -1;
+    private static final int SUCCESS = 0;
+
+    private final Injector mInjector;
+
+    RemoteProvisioningShellCommand() {
+        this(new Injector());
+    }
+
+    @VisibleForTesting
+    RemoteProvisioningShellCommand(Injector injector) {
+        mInjector = injector;
+    }
+
+    @Override
+    public void onHelp() {
+        getOutPrintWriter().print(USAGE);
+    }
+
+    @Override
+    @SuppressWarnings("CatchAndPrintStackTrace")
+    public int onCommand(String cmd) {
+        if (cmd == null) {
+            return handleDefaultCommands(cmd);
+        }
+        try {
+            switch (cmd) {
+                case "list":
+                    return list();
+                case "csr":
+                    return csr();
+                default:
+                    return handleDefaultCommands(cmd);
+            }
+        } catch (Exception e) {
+            e.printStackTrace(getErrPrintWriter());
+            return ERROR;
+        }
+    }
+
+    @SuppressWarnings("CatchAndPrintStackTrace")
+    void dump(PrintWriter pw) {
+        try {
+            IndentingPrintWriter ipw = new IndentingPrintWriter(pw);
+            for (String name : mInjector.getIrpcNames()) {
+                ipw.println(name + ":");
+                ipw.increaseIndent();
+                dumpRpcInstance(ipw, name);
+                ipw.decreaseIndent();
+            }
+        } catch (Exception e) {
+            e.printStackTrace(pw);
+        }
+    }
+
+    private void dumpRpcInstance(PrintWriter pw, String name) throws RemoteException {
+        RpcHardwareInfo info = mInjector.getIrpcBinder(name).getHardwareInfo();
+        pw.println("hwVersion=" + info.versionNumber);
+        pw.println("rpcAuthorName=" + info.rpcAuthorName);
+        if (info.versionNumber < 3) {
+            pw.println("supportedEekCurve=" + info.supportedEekCurve);
+        }
+        pw.println("uniqueId=" + info.uniqueId);
+        pw.println("supportedNumKeysInCsr=" + info.supportedNumKeysInCsr);
+    }
+
+    private int list() throws RemoteException {
+        for (String name : mInjector.getIrpcNames()) {
+            getOutPrintWriter().println(name);
+        }
+        return SUCCESS;
+    }
+
+    private int csr() throws RemoteException, CborException {
+        byte[] challenge = {};
+        String opt;
+        while ((opt = getNextOption()) != null) {
+            switch (opt) {
+                case "--challenge":
+                    challenge = Base64.getDecoder().decode(getNextArgRequired());
+                    break;
+                default:
+                    getErrPrintWriter().println("error: unknown option");
+                    return ERROR;
+            }
+        }
+        String name = getNextArgRequired();
+
+        IRemotelyProvisionedComponent binder = mInjector.getIrpcBinder(name);
+        RpcHardwareInfo info = binder.getHardwareInfo();
+        MacedPublicKey[] emptyKeys = new MacedPublicKey[] {};
+        byte[] csrBytes;
+        switch (info.versionNumber) {
+            case 1:
+            case 2:
+                DeviceInfo deviceInfo = new DeviceInfo();
+                ProtectedData protectedData = new ProtectedData();
+                byte[] eek = getEekChain(info.supportedEekCurve);
+                byte[] keysToSignMac = binder.generateCertificateRequest(
+                        /*testMode=*/false, emptyKeys, eek, challenge, deviceInfo, protectedData);
+                csrBytes = composeCertificateRequestV1(
+                        deviceInfo, challenge, protectedData, keysToSignMac);
+                break;
+            case 3:
+                csrBytes = binder.generateCertificateRequestV2(emptyKeys, challenge);
+                break;
+            default:
+                getErrPrintWriter().println("error: unsupported hwVersion: " + info.versionNumber);
+                return ERROR;
+        }
+        getOutPrintWriter().println(Base64.getEncoder().encodeToString(csrBytes));
+        return SUCCESS;
+    }
+
+    private byte[] getEekChain(int supportedEekCurve) {
+        switch (supportedEekCurve) {
+            case RpcHardwareInfo.CURVE_25519:
+                return Base64.getDecoder().decode(EEK_ED25519_BASE64);
+            case RpcHardwareInfo.CURVE_P256:
+                return Base64.getDecoder().decode(EEK_P256_BASE64);
+            default:
+                throw new IllegalArgumentException("unsupported EEK curve: " + supportedEekCurve);
+        }
+    }
+
+    private byte[] composeCertificateRequestV1(DeviceInfo deviceInfo, byte[] challenge,
+            ProtectedData protectedData, byte[] keysToSignMac) throws CborException {
+        Array info = new Array()
+                .add(decode(deviceInfo.deviceInfo))
+                .add(new Map());
+
+        // COSE_Signature with the hmac-sha256 algorithm and without a payload.
+        Array mac = new Array()
+                .add(new ByteString(encode(
+                            new Map().put(new UnsignedInteger(1), new UnsignedInteger(5)))))
+                .add(new Map())
+                .add(SimpleValue.NULL)
+                .add(new ByteString(keysToSignMac));
+
+        Array csr = new Array()
+                .add(info)
+                .add(new ByteString(challenge))
+                .add(decode(protectedData.protectedData))
+                .add(mac);
+
+        return encode(csr);
+    }
+
+    private byte[] encode(DataItem item) throws CborException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        new CborEncoder(baos).encode(item);
+        return baos.toByteArray();
+    }
+
+    private DataItem decode(byte[] data) throws CborException {
+        ByteArrayInputStream bais = new ByteArrayInputStream(data);
+        return new CborDecoder(bais).decodeNext();
+    }
+
+    @VisibleForTesting
+    static class Injector {
+        String[] getIrpcNames() {
+            return ServiceManager.getDeclaredInstances(IRemotelyProvisionedComponent.DESCRIPTOR);
+        }
+
+        IRemotelyProvisionedComponent getIrpcBinder(String name) {
+            String irpc = IRemotelyProvisionedComponent.DESCRIPTOR + "/" + name;
+            IRemotelyProvisionedComponent binder =
+                    IRemotelyProvisionedComponent.Stub.asInterface(
+                            ServiceManager.waitForDeclaredService(irpc));
+            if (binder == null) {
+                throw new IllegalArgumentException("failed to find " + irpc);
+            }
+            return binder;
+        }
+    }
+}
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/wallpaper/WallpaperManagerInternal.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerInternal.java
index 584fbdd..3699557 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerInternal.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerInternal.java
@@ -27,4 +27,10 @@
      * Notifies the display is ready for adding wallpaper on it.
      */
     public abstract void onDisplayReady(int displayId);
+
+    /** Notifies when the screen finished turning on and is visible to the user. */
+    public abstract void onScreenTurnedOn(int displayId);
+
+    /** Notifies when the screen starts turning on and is not yet visible to the user. */
+    public abstract void onScreenTurningOn(int displayId);
 }
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 4a03628..51872b3 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -1229,10 +1229,11 @@
                     return;
                 }
 
+                // Live wallpapers always are system wallpapers unless lock screen live wp is
+                // enabled.
+                which = mIsLockscreenLiveWallpaperEnabled ? mWallpaper.mWhich : FLAG_SYSTEM;
                 mWallpaper.primaryColors = primaryColors;
 
-                // Live wallpapers always are system wallpapers.
-                which = FLAG_SYSTEM;
                 // It's also the lock screen wallpaper when we don't have a bitmap in there.
                 if (displayId == DEFAULT_DISPLAY) {
                     final WallpaperData lockedWallpaper = mLockWallpaperMap.get(mWallpaper.userId);
@@ -1613,6 +1614,15 @@
         public void onDisplayReady(int displayId) {
             onDisplayReadyInternal(displayId);
         }
+
+        @Override
+        public void onScreenTurnedOn(int displayId) {
+            notifyScreenTurnedOn(displayId);
+        }
+        @Override
+        public void onScreenTurningOn(int displayId) {
+            notifyScreenTurningOn(displayId);
+        }
     }
 
     void initialize() {
@@ -2442,6 +2452,54 @@
         }
     }
 
+    /**
+     * Propagates screen turned on event to wallpaper engine.
+     */
+    @Override
+    public void notifyScreenTurnedOn(int displayId) {
+        synchronized (mLock) {
+            final WallpaperData data = mWallpaperMap.get(mCurrentUserId);
+            if (data != null
+                    && data.connection != null
+                    && data.connection.containsDisplay(displayId)) {
+                final IWallpaperEngine engine = data.connection
+                        .getDisplayConnectorOrCreate(displayId).mEngine;
+                if (engine != null) {
+                    try {
+                        engine.onScreenTurnedOn();
+                    } catch (RemoteException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+    }
+
+
+
+    /**
+     * Propagate screen turning on event to wallpaper engine.
+     */
+    @Override
+    public void notifyScreenTurningOn(int displayId) {
+        synchronized (mLock) {
+            final WallpaperData data = mWallpaperMap.get(mCurrentUserId);
+            if (data != null
+                    && data.connection != null
+                    && data.connection.containsDisplay(displayId)) {
+                final IWallpaperEngine engine = data.connection
+                        .getDisplayConnectorOrCreate(displayId).mEngine;
+                if (engine != null) {
+                    try {
+                        engine.onScreenTurningOn();
+                    } catch (RemoteException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+    }
+
     @Override
     public boolean setLockWallpaperCallback(IWallpaperManagerCallback cb) {
         checkPermission(android.Manifest.permission.INTERNAL_SYSTEM_WINDOW);
diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java
index 6214440..8bbcd27 100644
--- a/services/core/java/com/android/server/wm/ActivityClientController.java
+++ b/services/core/java/com/android/server/wm/ActivityClientController.java
@@ -97,7 +97,6 @@
 
 import com.android.internal.app.AssistUtils;
 import com.android.internal.policy.IKeyguardDismissCallback;
-import com.android.internal.protolog.ProtoLogGroup;
 import com.android.internal.protolog.common.ProtoLog;
 import com.android.server.LocalServices;
 import com.android.server.Watchdog;
@@ -1142,19 +1141,11 @@
         // Initiate the transition.
         final Transition transition = new Transition(TRANSIT_CHANGE, 0 /* flags */, controller,
                 mService.mWindowManager.mSyncEngine);
-        if (mService.mWindowManager.mSyncEngine.hasActiveSync()) {
-            ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
-                    "Creating Pending Multiwindow Fullscreen Request: %s", transition);
-            mService.mWindowManager.mSyncEngine.queueSyncSet(
-                    () -> r.mTransitionController.moveToCollecting(transition),
-                    () -> {
-                        executeFullscreenRequestTransition(fullscreenRequest, callback, r,
-                                transition, true /* queued */);
-                    });
-        } else {
-            executeFullscreenRequestTransition(fullscreenRequest, callback, r, transition,
-                    false /* queued */);
-        }
+        r.mTransitionController.startCollectOrQueue(transition,
+                (deferred) -> {
+                    executeFullscreenRequestTransition(fullscreenRequest, callback, r,
+                            transition, deferred);
+                });
     }
 
     private void executeFullscreenRequestTransition(int fullscreenRequest, IRemoteCallback callback,
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 1bcc05e..c6a2e0e 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -306,7 +306,6 @@
 import android.os.Debug;
 import android.os.IBinder;
 import android.os.IRemoteCallback;
-import android.os.LocaleList;
 import android.os.PersistableBundle;
 import android.os.Process;
 import android.os.RemoteCallbackList;
@@ -2822,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) {
@@ -2844,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"
@@ -2864,20 +2890,7 @@
                     this);
             return;
         }
-
-        if (animate && mTransitionController.inCollectingTransition(startingWindow)
-                && startingWindow.cancelAndRedraw()) {
-            // Defer remove starting window after transition start.
-            // If splash screen window was in collecting, the client side is unable to draw because
-            // of Session#cancelDraw, which will blocking the remove animation.
-            startingWindow.mSyncTransaction.addTransactionCommittedListener(Runnable::run, () -> {
-                synchronized (mAtmService.mGlobalLock) {
-                    surface.remove(true);
-                }
-            });
-        } else {
-            surface.remove(animate);
-        }
+        surface.remove(animate);
     }
 
     /**
@@ -4147,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
@@ -5313,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()) {
@@ -9806,7 +9831,7 @@
         if (mTransitionController.isShellTransitionsEnabled()) {
             final Transition transition = new Transition(TRANSIT_RELAUNCH, 0 /* flags */,
                     mTransitionController, mWmService.mSyncEngine);
-            final Runnable executeRestart = () -> {
+            mTransitionController.startCollectOrQueue(transition, (deferred) -> {
                 if (mState != RESTARTING_PROCESS || !attachedToProcess()) {
                     transition.abort();
                     return;
@@ -9818,14 +9843,7 @@
                 mTransitionController.requestStartTransition(transition, task,
                         null /* remoteTransition */, null /* displayChange */);
                 scheduleStopForRestartProcess();
-            };
-            if (mWmService.mSyncEngine.hasActiveSync()) {
-                mWmService.mSyncEngine.queueSyncSet(
-                        () -> mTransitionController.moveToCollecting(transition), executeRestart);
-            } else {
-                mTransitionController.moveToCollecting(transition);
-                executeRestart.run();
-            }
+            });
         } else {
             startFreezingScreen();
             scheduleStopForRestartProcess();
@@ -10598,17 +10616,14 @@
             return;
         }
 
-        LocaleList locale;
         final ActivityTaskManagerInternal.PackageConfig appConfig =
                 mAtmService.mPackageConfigPersister.findPackageConfiguration(
                         task.realActivity.getPackageName(), mUserId);
-        // if there is no app locale for the package, clear the target activity's locale.
-        if (appConfig == null || appConfig.mLocales == null || appConfig.mLocales.isEmpty()) {
-            locale = LocaleList.getEmptyLocaleList();
-        } else {
-            locale = appConfig.mLocales;
+        // If package lookup yields locales, set the target activity's locales to match,
+        // otherwise leave target activity as-is.
+        if (appConfig != null && appConfig.mLocales != null && !appConfig.mLocales.isEmpty()) {
+            resolvedConfig.setLocales(appConfig.mLocales);
         }
-        resolvedConfig.setLocales(locale);
     }
 
     /**
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 8123c07..ea0731a 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;
@@ -250,7 +249,6 @@
 import com.android.internal.os.TransferPipe;
 import com.android.internal.policy.AttributeCache;
 import com.android.internal.policy.KeyguardDismissCallback;
-import com.android.internal.protolog.ProtoLogGroup;
 import com.android.internal.protolog.common.ProtoLog;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.FastPrintWriter;
@@ -1245,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(
@@ -1504,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())
@@ -1652,7 +1648,7 @@
                     .setResultWho(resultWho)
                     .setRequestCode(requestCode)
                     .setStartFlags(startFlags)
-                    .setActivityOptions(bOptions)
+                    .setActivityOptions(createSafeActivityOptionsWithBalAllowed(bOptions))
                     .setUserId(userId)
                     .setIgnoreTargetSecurity(ignoreTargetSecurity)
                     .setFilterCallingUid(isResolver ? 0 /* system */ : targetUid)
@@ -1702,7 +1698,7 @@
                 .setVoiceInteractor(interactor)
                 .setStartFlags(startFlags)
                 .setProfilerInfo(profilerInfo)
-                .setActivityOptions(bOptions)
+                .setActivityOptions(createSafeActivityOptionsWithBalAllowed(bOptions))
                 .setUserId(userId)
                 .setBackgroundStartPrivileges(BackgroundStartPrivileges.ALLOW_BAL)
                 .execute();
@@ -1729,7 +1725,7 @@
                     .setCallingPackage(callingPackage)
                     .setCallingFeatureId(callingFeatureId)
                     .setResolvedType(resolvedType)
-                    .setActivityOptions(bOptions)
+                    .setActivityOptions(createSafeActivityOptionsWithBalAllowed(bOptions))
                     .setUserId(userId)
                     .setBackgroundStartPrivileges(BackgroundStartPrivileges.ALLOW_BAL)
                     .execute();
@@ -2000,6 +1996,24 @@
         }
     }
 
+    @Override
+    public void focusTopTask(int displayId) {
+        enforceTaskPermission("focusTopTask()");
+        final long callingId = Binder.clearCallingIdentity();
+        try {
+            synchronized (mGlobalLock) {
+                final DisplayContent dc = mRootWindowContainer.getDisplayContent(displayId);
+                if (dc == null) return;
+                final Task task = dc.getTask((t) -> t.isLeafTask() && t.isFocusable(),
+                        true /*  traverseTopToBottom */);
+                if (task == null) return;
+                setFocusedTask(task.mTaskId, null /* touchedActivity */);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(callingId);
+        }
+    }
+
     void setFocusedTask(int taskId, ActivityRecord touchedActivity) {
         ProtoLog.d(WM_DEBUG_FOCUS, "setFocusedTask: taskId=%d touchedActivity=%s", taskId,
                 touchedActivity);
@@ -2012,7 +2026,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;
         }
@@ -2873,29 +2888,19 @@
 
                 final Transition transition = new Transition(TRANSIT_CHANGE, 0 /* flags */,
                         getTransitionController(), mWindowManager.mSyncEngine);
-                if (mWindowManager.mSyncEngine.hasActiveSync()) {
-                    mWindowManager.mSyncEngine.queueSyncSet(
-                            () -> getTransitionController().moveToCollecting(transition),
-                            () -> {
-                                if (!task.getWindowConfiguration().canResizeTask()) {
-                                    Slog.w(TAG, "resizeTask not allowed on task=" + task);
-                                    transition.abort();
-                                    return;
-                                }
-                                getTransitionController().requestStartTransition(transition, task,
-                                        null /* remoteTransition */, null /* displayChange */);
-                                getTransitionController().collect(task);
-                                task.resize(bounds, resizeMode, preserveWindow);
-                                transition.setReady(task, true);
-                            });
-                } else {
-                    getTransitionController().moveToCollecting(transition);
-                    getTransitionController().requestStartTransition(transition, task,
-                            null /* remoteTransition */, null /* displayChange */);
-                    getTransitionController().collect(task);
-                    task.resize(bounds, resizeMode, preserveWindow);
-                    transition.setReady(task, true);
-                }
+                getTransitionController().startCollectOrQueue(transition,
+                        (deferred) -> {
+                            if (deferred && !task.getWindowConfiguration().canResizeTask()) {
+                                Slog.w(TAG, "resizeTask not allowed on task=" + task);
+                                transition.abort();
+                                return;
+                            }
+                            getTransitionController().requestStartTransition(transition, task,
+                                    null /* remoteTransition */, null /* displayChange */);
+                            getTransitionController().collect(task);
+                            task.resize(bounds, resizeMode, preserveWindow);
+                            transition.setReady(task, true);
+                        });
             }
         } finally {
             Binder.restoreCallingIdentity(ident);
@@ -3626,34 +3631,25 @@
             mActivityClientController.dismissKeyguard(r.token, new KeyguardDismissCallback() {
                 @Override
                 public void onDismissSucceeded() {
-                    if (transition != null && mWindowManager.mSyncEngine.hasActiveSync()) {
-                        ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
-                                "Creating Pending Pip-Enter: %s", transition);
-                        mWindowManager.mSyncEngine.queueSyncSet(
-                                () -> getTransitionController().moveToCollecting(transition),
-                                enterPipRunnable);
-                    } else {
-                        // Move to collecting immediately to "claim" the sync-engine for this
-                        // transition.
-                        if (transition != null) {
-                            getTransitionController().moveToCollecting(transition);
-                        }
+                    if (transition == null) {
                         mH.post(enterPipRunnable);
+                        return;
                     }
+                    getTransitionController().startCollectOrQueue(transition, (deferred) -> {
+                        if (deferred) {
+                            enterPipRunnable.run();
+                        } else {
+                            mH.post(enterPipRunnable);
+                        }
+                    });
                 }
             }, null /* message */);
         } else {
             // Enter picture in picture immediately otherwise
-            if (transition != null && mWindowManager.mSyncEngine.hasActiveSync()) {
-                ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
-                        "Creating Pending Pip-Enter: %s", transition);
-                mWindowManager.mSyncEngine.queueSyncSet(
-                        () -> getTransitionController().moveToCollecting(transition),
-                        enterPipRunnable);
+            if (transition != null) {
+                getTransitionController().startCollectOrQueue(transition,
+                        (deferred) -> enterPipRunnable.run());
             } else {
-                if (transition != null) {
-                    getTransitionController().moveToCollecting(transition);
-                }
                 enterPipRunnable.run();
             }
         }
@@ -5376,7 +5372,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;
@@ -5527,6 +5523,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/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index be503fc..7d220df 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -82,6 +82,7 @@
 import static com.android.server.wm.WindowContainer.POSITION_TOP;
 
 import android.Manifest;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.Activity;
 import android.app.ActivityManager;
@@ -261,6 +262,8 @@
     /** Helper for {@link Task#fillTaskInfo}. */
     final TaskInfoHelper mTaskInfoHelper = new TaskInfoHelper();
 
+    final OpaqueActivityHelper mOpaqueActivityHelper = new OpaqueActivityHelper();
+
     private final ActivityTaskSupervisorHandler mHandler;
     final Looper mLooper;
 
@@ -2906,6 +2909,38 @@
         }
     }
 
+    /** The helper to get the top opaque activity of a container. */
+    static class OpaqueActivityHelper implements Predicate<ActivityRecord> {
+        private ActivityRecord mStarting;
+        private boolean mIncludeInvisibleAndFinishing;
+
+        ActivityRecord getOpaqueActivity(@NonNull WindowContainer<?> container) {
+            mIncludeInvisibleAndFinishing = true;
+            return container.getActivity(this,
+                    true /* traverseTopToBottom */, null /* boundary */);
+        }
+
+        ActivityRecord getVisibleOpaqueActivity(@NonNull WindowContainer<?> container,
+                @Nullable ActivityRecord starting) {
+            mStarting = starting;
+            mIncludeInvisibleAndFinishing = false;
+            final ActivityRecord opaque = container.getActivity(this,
+                    true /* traverseTopToBottom */, null /* boundary */);
+            mStarting = null;
+            return opaque;
+        }
+
+        @Override
+        public boolean test(ActivityRecord r) {
+            if (!mIncludeInvisibleAndFinishing && !r.visibleIgnoringKeyguard && r != mStarting) {
+                // Ignore invisible activities that are not the currently starting activity
+                // (about to be visible).
+                return false;
+            }
+            return r.occludesParent(mIncludeInvisibleAndFinishing /* includingFinishing */);
+        }
+    }
+
     /**
      * Fills the info that needs to iterate all activities of task, such as the number of
      * non-finishing activities and collecting launch cookies.
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/BLASTSyncEngine.java b/services/core/java/com/android/server/wm/BLASTSyncEngine.java
index d916a1b..7ecc083 100644
--- a/services/core/java/com/android/server/wm/BLASTSyncEngine.java
+++ b/services/core/java/com/android/server/wm/BLASTSyncEngine.java
@@ -133,7 +133,7 @@
             return mOrphanTransaction;
         }
 
-        private void onSurfacePlacement() {
+        private void tryFinish() {
             if (!mReady) return;
             ProtoLog.v(WM_DEBUG_SYNC_ENGINE, "SyncGroup %d: onSurfacePlacement checking %s",
                     mSyncId, mRootMembers);
@@ -168,14 +168,13 @@
             class CommitCallback implements Runnable {
                 // Can run a second time if the action completes after the timeout.
                 boolean ran = false;
-                public void onCommitted() {
+                public void onCommitted(SurfaceControl.Transaction t) {
                     synchronized (mWm.mGlobalLock) {
                         if (ran) {
                             return;
                         }
                         mHandler.removeCallbacks(this);
                         ran = true;
-                        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
                         for (WindowContainer wc : wcAwaitingCommit) {
                             wc.onSyncTransactionCommitted(t);
                         }
@@ -194,12 +193,12 @@
                     Slog.e(TAG, "WM sent Transaction to organized, but never received" +
                            " commit callback. Application ANR likely to follow.");
                     Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
-                    onCommitted();
-
+                    onCommitted(merged);
                 }
             };
             CommitCallback callback = new CommitCallback();
-            merged.addTransactionCommittedListener((r) -> { r.run(); }, callback::onCommitted);
+            merged.addTransactionCommittedListener(Runnable::run,
+                    () -> callback.onCommitted(new SurfaceControl.Transaction()));
             mHandler.postDelayed(callback, BLAST_TIMEOUT_DURATION);
 
             Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "onTransactionReady");
@@ -223,6 +222,12 @@
                     }
                 });
             }
+            // Notify idle listeners
+            for (int i = mOnIdleListeners.size() - 1; i >= 0; --i) {
+                // If an idle listener adds a sync, though, then stop notifying.
+                if (mActiveSyncs.size() > 0) break;
+                mOnIdleListeners.get(i).run();
+            }
         }
 
         private void setReady(boolean ready) {
@@ -281,6 +286,8 @@
      */
     private final ArrayList<PendingSyncSet> mPendingSyncSets = new ArrayList<>();
 
+    private final ArrayList<Runnable> mOnIdleListeners = new ArrayList<>();
+
     BLASTSyncEngine(WindowManagerService wms) {
         this(wms, wms.mH);
     }
@@ -379,10 +386,15 @@
     void onSurfacePlacement() {
         // backwards since each state can remove itself if finished
         for (int i = mActiveSyncs.size() - 1; i >= 0; --i) {
-            mActiveSyncs.valueAt(i).onSurfacePlacement();
+            mActiveSyncs.valueAt(i).tryFinish();
         }
     }
 
+    /** Only use this for tests! */
+    void tryFinishForTest(int syncId) {
+        getSyncSet(syncId).tryFinish();
+    }
+
     /**
      * Queues a sync operation onto this engine. It will wait until any current/prior sync-sets
      * have finished to run. This is needed right now because currently {@link BLASTSyncEngine}
@@ -409,4 +421,8 @@
     boolean hasPendingSyncSets() {
         return !mPendingSyncSets.isEmpty();
     }
+
+    void addOnIdleListener(Runnable onIdleListener) {
+        mOnIdleListeners.add(onIdleListener);
+    }
 }
diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java
index 7453743..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);
             }
 
@@ -532,14 +533,7 @@
             if (newFocus != null && newFocus != mNavigatingWindow
                     && (newFocus.mActivityRecord == null
                     || (newFocus.mActivityRecord == mNavigatingWindow.mActivityRecord))) {
-                EventLogTags.writeWmBackNaviCanceled("focusWindowChanged");
-                if (isMonitorForRemote()) {
-                    mObserver.sendResult(null /* result */);
-                }
-                if (isMonitorAnimationOrTransition()) {
-                    // transition won't happen, cancel internal status
-                    clearBackAnimations();
-                }
+                cancelBackNavigating("focusWindowChanged");
             }
         }
 
@@ -553,19 +547,12 @@
             }
             final ArrayList<WindowContainer> all = new ArrayList<>(opening);
             all.addAll(closing);
-            for (WindowContainer app : all) {
-                if (app.hasChild(mNavigatingWindow)) {
-                    EventLogTags.writeWmBackNaviCanceled("transitionHappens");
-                    if (isMonitorForRemote()) {
-                        mObserver.sendResult(null /* result */);
-                    }
-                    if (isMonitorAnimationOrTransition()) {
-                        clearBackAnimations();
-                    }
+            for (int i = all.size() - 1; i >= 0; --i) {
+                if (all.get(i).hasChild(mNavigatingWindow)) {
+                    cancelBackNavigating("transitionHappens");
                     break;
                 }
             }
-
         }
 
         private boolean atSameDisplay(WindowState newFocus) {
@@ -575,6 +562,17 @@
             final int navigatingDisplayId = mNavigatingWindow.getDisplayId();
             return newFocus == null || newFocus.getDisplayId() == navigatingDisplayId;
         }
+
+        private void cancelBackNavigating(String reason) {
+            EventLogTags.writeWmBackNaviCanceled(reason);
+            if (isMonitorForRemote()) {
+                mObserver.sendResult(null /* result */);
+            }
+            if (isMonitorAnimationOrTransition()) {
+                clearBackAnimations();
+            }
+            cancelPendingAnimation();
+        }
     }
 
     // For shell transition
@@ -677,12 +675,7 @@
             Slog.w(TAG, "Finished transition didn't include the targets"
                     + " open: " + mPendingAnimationBuilder.mOpenTarget
                     + " close: " + mPendingAnimationBuilder.mCloseTarget);
-            try {
-                mPendingAnimationBuilder.mBackAnimationAdapter.getRunner().onAnimationCancelled();
-            } catch (RemoteException e) {
-                throw new RuntimeException(e);
-            }
-            mPendingAnimationBuilder = null;
+            cancelPendingAnimation();
             return false;
         }
 
@@ -697,6 +690,18 @@
         return true;
     }
 
+    private void cancelPendingAnimation() {
+        if (mPendingAnimationBuilder == null) {
+            return;
+        }
+        try {
+            mPendingAnimationBuilder.mBackAnimationAdapter.getRunner().onAnimationCancelled();
+        } catch (RemoteException e) {
+            Slog.e(TAG, "Remote animation gone", e);
+        }
+        mPendingAnimationBuilder = null;
+    }
+
     /**
      * Create and handling animations status for an open/close animation targets.
      */
diff --git a/services/core/java/com/android/server/wm/Dimmer.java b/services/core/java/com/android/server/wm/Dimmer.java
index c6db8a7..8660bec 100644
--- a/services/core/java/com/android/server/wm/Dimmer.java
+++ b/services/core/java/com/android/server/wm/Dimmer.java
@@ -263,16 +263,19 @@
      * {@link WindowContainer#prepareSurfaces}. After calling this, the container should
      * chain {@link WindowContainer#prepareSurfaces} down to it's children to give them
      * a chance to request dims to continue.
-     * @return Non-null dim bounds if the dimmer is showing.
      */
-    Rect resetDimStates() {
+    void resetDimStates() {
         if (mDimState == null) {
-            return null;
+            return;
         }
         if (!mDimState.mDontReset) {
             mDimState.mDimming = false;
         }
-        return mDimState.mDimBounds;
+    }
+
+    /** Returns non-null bounds if the dimmer is showing. */
+    Rect getDimBounds() {
+        return mDimState != null ? mDimState.mDimBounds : null;
     }
 
     void dontAnimateExit() {
diff --git a/services/core/java/com/android/server/wm/DisplayArea.java b/services/core/java/com/android/server/wm/DisplayArea.java
index 26f56a2..9f59f5a 100644
--- a/services/core/java/com/android/server/wm/DisplayArea.java
+++ b/services/core/java/com/android/server/wm/DisplayArea.java
@@ -779,8 +779,9 @@
 
         @Override
         void prepareSurfaces() {
-            final Rect dimBounds = mDimmer.resetDimStates();
+            mDimmer.resetDimStates();
             super.prepareSurfaces();
+            final Rect dimBounds = mDimmer.getDimBounds();
             if (dimBounds != null) {
                 // Bounds need to be relative, as the dim layer is a child.
                 getBounds(dimBounds);
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..76d6951 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.
      */
@@ -1850,7 +1858,8 @@
             return false;
         }
         if (mLastWallpaperVisible && r.windowsCanBeWallpaperTarget()
-                && mFixedRotationTransitionListener.mAnimatingRecents == null) {
+                && mFixedRotationTransitionListener.mAnimatingRecents == null
+                && !mTransitionController.isTransientLaunch(r)) {
             // Use normal rotation animation for orientation change of visible wallpaper if recents
             // animation is not running (it may be swiping to home).
             return false;
@@ -4267,7 +4276,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 +4473,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 +4485,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 +4507,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/Letterbox.java b/services/core/java/com/android/server/wm/Letterbox.java
index 3d00686..3551370 100644
--- a/services/core/java/com/android/server/wm/Letterbox.java
+++ b/services/core/java/com/android/server/wm/Letterbox.java
@@ -18,6 +18,7 @@
 
 import static android.os.InputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS;
 import static android.view.SurfaceControl.HIDDEN;
+import static android.window.TaskConstants.TASK_CHILD_LAYER_LETTERBOX_BACKGROUND;
 
 import android.content.Context;
 import android.graphics.Color;
@@ -361,7 +362,8 @@
                     .setCallsite("LetterboxSurface.createSurface")
                     .build();
 
-            t.setLayer(mSurface, -1).setColorSpaceAgnostic(mSurface, true);
+            t.setLayer(mSurface, TASK_CHILD_LAYER_LETTERBOX_BACKGROUND)
+                    .setColorSpaceAgnostic(mSurface, true);
         }
 
         void attachInput(WindowState win) {
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/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index 57fca3ae..2378469 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -146,8 +146,6 @@
 
     @VisibleForTesting
     boolean mIsAddingTaskToTargets;
-    @VisibleForTesting
-    boolean mShouldAttachNavBarToAppDuringTransition;
     private boolean mNavigationBarAttachedToApp;
     private ActivityRecord mNavBarAttachedApp;
 
@@ -379,8 +377,6 @@
         mDisplayId = displayId;
         mStatusBar = LocalServices.getService(StatusBarManagerInternal.class);
         mDisplayContent = service.mRoot.getDisplayContent(displayId);
-        mShouldAttachNavBarToAppDuringTransition =
-                mDisplayContent.getDisplayPolicy().shouldAttachNavBarToAppDuringTransition();
     }
 
     /**
@@ -577,7 +573,7 @@
     }
 
     private void attachNavigationBarToApp() {
-        if (!mShouldAttachNavBarToAppDuringTransition
+        if (!mDisplayContent.getDisplayPolicy().shouldAttachNavBarToAppDuringTransition()
                 // Skip the case where the nav bar is controlled by fade rotation.
                 || mDisplayContent.getAsyncRotationController() != null) {
             return;
@@ -652,7 +648,7 @@
     }
 
     void animateNavigationBarForAppLaunch(long duration) {
-        if (!mShouldAttachNavBarToAppDuringTransition
+        if (!mDisplayContent.getDisplayPolicy().shouldAttachNavBarToAppDuringTransition()
                 // Skip the case where the nav bar is controlled by fade rotation.
                 || mDisplayContent.getAsyncRotationController() != null
                 || mNavigationBarAttachedToApp
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 07daa4b..cd4b3c5 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -2328,19 +2328,23 @@
                 // this as a signal to the transition-player.
                 final Transition transition = new Transition(TRANSIT_SLEEP, 0 /* flags */,
                         display.mTransitionController, mWmService.mSyncEngine);
-                final Runnable sendSleepTransition = () -> {
+                final TransitionController.OnStartCollect sendSleepTransition = (deferred) -> {
                     display.mTransitionController.requestStartTransition(transition,
                             null /* trigger */, null /* remote */, null /* display */);
                     // Force playing immediately so that unrelated ops can't be collected.
                     transition.playNow();
                 };
-                if (display.mTransitionController.isCollecting()) {
-                    mWmService.mSyncEngine.queueSyncSet(
-                            () -> display.mTransitionController.moveToCollecting(transition),
-                            sendSleepTransition);
-                } else {
+                if (!display.mTransitionController.isCollecting()) {
+                    // Since this bypasses sync, submit directly ignoring whether sync-engine
+                    // is active.
+                    if (mWindowManager.mSyncEngine.hasActiveSync()) {
+                        Slog.w(TAG, "Ongoing sync outside of a transition.");
+                    }
                     display.mTransitionController.moveToCollecting(transition);
-                    sendSleepTransition.run();
+                    sendSleepTransition.onCollectStarted(false /* deferred */);
+                } else {
+                    display.mTransitionController.startCollectOrQueue(transition,
+                            sendSleepTransition);
                 }
             }
 
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 10055bd..99d3cc0 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -188,7 +188,6 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.IVoiceInteractor;
-import com.android.internal.protolog.ProtoLogGroup;
 import com.android.internal.protolog.common.ProtoLog;
 import com.android.internal.util.XmlUtils;
 import com.android.internal.util.function.pooled.PooledLambda;
@@ -2363,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;
@@ -2748,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;
         }
@@ -3253,9 +3268,10 @@
 
     @Override
     void prepareSurfaces() {
-        final Rect dimBounds = mDimmer.resetDimStates();
+        mDimmer.resetDimStates();
         super.prepareSurfaces();
 
+        final Rect dimBounds = mDimmer.getDimBounds();
         if (dimBounds != null) {
             getDimBounds(dimBounds);
 
@@ -5632,30 +5648,20 @@
             final Transition transition = new Transition(TRANSIT_TO_BACK, 0 /* flags */,
                     mTransitionController, mWmService.mSyncEngine);
             // Guarantee that this gets its own transition by queueing on SyncEngine
-            if (mWmService.mSyncEngine.hasActiveSync()) {
-                ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
-                        "Creating Pending Move-to-back: %s", transition);
-                mWmService.mSyncEngine.queueSyncSet(
-                        () -> mTransitionController.moveToCollecting(transition),
-                        () -> {
-                            // Need to check again since this happens later and the system might
-                            // be in a different state.
-                            if (!canMoveTaskToBack(tr)) {
-                                Slog.e(TAG, "Failed to move task to back after saying we could: "
-                                        + tr.mTaskId);
-                                transition.abort();
-                                return;
-                            }
-                            mTransitionController.requestStartTransition(transition, tr,
-                                    null /* remoteTransition */, null /* displayChange */);
-                            moveTaskToBackInner(tr);
-                        });
-            } else {
-                mTransitionController.moveToCollecting(transition);
-                mTransitionController.requestStartTransition(transition, tr,
-                        null /* remoteTransition */, null /* displayChange */);
-                moveTaskToBackInner(tr);
-            }
+            mTransitionController.startCollectOrQueue(transition,
+                    (deferred) -> {
+                        // Need to check again if deferred since the system might
+                        // be in a different state.
+                        if (!isAttached() || (deferred && !canMoveTaskToBack(tr))) {
+                            Slog.e(TAG, "Failed to move task to back after saying we could: "
+                                    + tr.mTaskId);
+                            transition.abort();
+                            return;
+                        }
+                        mTransitionController.requestStartTransition(transition, tr,
+                                null /* remoteTransition */, null /* displayChange */);
+                        moveTaskToBackInner(tr);
+                    });
         } else {
             // Skip the transition for pinned task.
             if (!inPinnedWindowingMode()) {
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/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 1d232fe..3f7ab14 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -102,8 +102,6 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.protolog.common.ProtoLog;
-import com.android.internal.util.function.pooled.PooledLambda;
-import com.android.internal.util.function.pooled.PooledPredicate;
 import com.android.server.am.HostingRecord;
 import com.android.server.pm.pkg.AndroidPackage;
 
@@ -934,11 +932,10 @@
         if (!isAttached() || isForceHidden() || isForceTranslucent()) {
             return true;
         }
-        final PooledPredicate p = PooledLambda.obtainPredicate(TaskFragment::isOpaqueActivity,
-                PooledLambda.__(ActivityRecord.class), starting, false /* including*/);
-        final ActivityRecord opaque = getActivity(p);
-        p.recycle();
-        return opaque == null;
+        // A TaskFragment isn't translucent if it has at least one visible activity that occludes
+        // this TaskFragment.
+        return mTaskSupervisor.mOpaqueActivityHelper.getVisibleOpaqueActivity(this,
+                starting) == null;
     }
 
     /**
@@ -951,25 +948,7 @@
             return true;
         }
         // Including finishing Activity if the TaskFragment is becoming invisible in the transition.
-        final boolean includingFinishing = !isVisibleRequested();
-        final PooledPredicate p = PooledLambda.obtainPredicate(TaskFragment::isOpaqueActivity,
-                PooledLambda.__(ActivityRecord.class), null /* starting */, includingFinishing);
-        final ActivityRecord opaque = getActivity(p);
-        p.recycle();
-        return opaque == null;
-    }
-
-    private static boolean isOpaqueActivity(@NonNull ActivityRecord r,
-            @Nullable ActivityRecord starting, boolean includingFinishing) {
-        if (!r.visibleIgnoringKeyguard && r != starting) {
-            // Also ignore invisible activities that are not the currently starting
-            // activity (about to be visible).
-            return false;
-        }
-
-        // TaskFragment isn't translucent if it has at least one fullscreen activity that is
-        // visible.
-        return r.occludesParent(includingFinishing);
+        return mTaskSupervisor.mOpaqueActivityHelper.getOpaqueActivity(this) == null;
     }
 
     ActivityRecord getTopNonFinishingActivity() {
@@ -2923,9 +2902,10 @@
             return;
         }
 
-        final Rect dimBounds = mDimmer.resetDimStates();
+        mDimmer.resetDimStates();
         super.prepareSurfaces();
 
+        final Rect dimBounds = mDimmer.getDimBounds();
         if (dimBounds != null) {
             // Bounds need to be relative, as the dim layer is a child.
             dimBounds.offsetTo(0 /* newLeft */, 0 /* newTop */);
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/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 3a909ce..452bd6d 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -104,7 +104,8 @@
 import java.util.function.Predicate;
 
 /**
- * Represents a logical transition.
+ * Represents a logical transition. This keeps track of all the changes associated with a logical
+ * WM state -> state transition.
  * @see TransitionController
  */
 class Transition implements BLASTSyncEngine.TransactionReadyListener {
@@ -287,7 +288,7 @@
 
         if (restoreBelow != null) {
             final Task transientRootTask = activity.getRootTask();
-            // Collect all visible activities which can be occluded by the transient activity to
+            // Collect all visible tasks which can be occluded by the transient activity to
             // make sure they are in the participants so their visibilities can be updated when
             // finishing transition.
             ((WindowContainer<?>) restoreBelow.getParent()).forAllTasks(t -> {
@@ -297,11 +298,7 @@
                         mTransientHideTasks.add(t);
                     }
                     if (t.isLeafTask()) {
-                        t.forAllActivities(r -> {
-                            if (r.isVisibleRequested()) {
-                                collect(r);
-                            }
-                        });
+                        collect(t);
                     }
                 }
                 return t == restoreBelow;
@@ -420,6 +417,10 @@
         return mFinishTransaction;
     }
 
+    boolean isPending() {
+        return mState == STATE_PENDING;
+    }
+
     boolean isCollecting() {
         return mState == STATE_COLLECTING || mState == STATE_STARTED;
     }
@@ -904,6 +905,18 @@
         mController.mFinishingTransition = this;
 
         if (mTransientHideTasks != null && !mTransientHideTasks.isEmpty()) {
+            // Record all the now-hiding activities so that they are committed after
+            // recalculating visibilities. We just use mParticipants because we can and it will
+            // ensure proper reporting of `isInFinishTransition`.
+            for (int i = 0; i < mTransientHideTasks.size(); ++i) {
+                mTransientHideTasks.get(i).forAllActivities(r -> {
+                    // Only check leaf-tasks that were collected
+                    if (!mParticipants.contains(r.getTask())) return;
+                    // Only concern ourselves with anything that can become invisible
+                    if (!r.isVisible()) return;
+                    mParticipants.add(r);
+                });
+            }
             // The transient hide tasks could be occluded now, e.g. returning to home. So trigger
             // the update to make the activities in the tasks invisible-requested, then the next
             // step can continue to commit the visibility.
@@ -953,7 +966,10 @@
                         enterAutoPip = true;
                     }
                 }
-                if (mChanges.get(ar).mVisible != visibleAtTransitionEnd) {
+                final ChangeInfo changeInfo = mChanges.get(ar);
+                // Due to transient-hide, there may be some activities here which weren't in the
+                // transition.
+                if (changeInfo != null && changeInfo.mVisible != visibleAtTransitionEnd) {
                     // Legacy dispatch relies on this (for now).
                     ar.mEnteringAnimation = visibleAtTransitionEnd;
                 } else if (mTransientLaunches != null && mTransientLaunches.containsKey(ar)
@@ -1609,7 +1625,7 @@
         sb.append(Integer.toHexString(System.identityHashCode(this)));
         sb.append(" id=" + mSyncId);
         sb.append(" type=" + transitTypeToString(mType));
-        sb.append(" flags=" + mFlags);
+        sb.append(" flags=0x" + Integer.toHexString(mFlags));
         sb.append('}');
         return sb.toString();
     }
@@ -2824,7 +2840,7 @@
             final String name = isDisplayRotation ? "RotationLayer" : "transition snapshot: " + wc;
             SurfaceControl snapshotSurface = wc.makeAnimationLeash()
                     .setName(name)
-                    .setOpaque(true)
+                    .setOpaque(wc.fillsParent())
                     .setParent(wc.getSurfaceControl())
                     .setSecure(screenshotBuffer.containsSecureLayers())
                     .setCallsite("Transition.ScreenshotSync")
diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java
index 742ab7ce..e8e4792 100644
--- a/services/core/java/com/android/server/wm/TransitionController.java
+++ b/services/core/java/com/android/server/wm/TransitionController.java
@@ -51,6 +51,7 @@
 import android.window.WindowContainerTransaction;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.protolog.ProtoLogGroup;
 import com.android.internal.protolog.common.ProtoLog;
 import com.android.server.FgThread;
@@ -88,6 +89,7 @@
 
     private WindowProcessController mTransitionPlayerProc;
     final ActivityTaskManagerService mAtm;
+    BLASTSyncEngine mSyncEngine;
 
     final RemotePlayer mRemotePlayer;
     SnapshotController mSnapshotController;
@@ -121,6 +123,26 @@
 
     private final IBinder.DeathRecipient mTransitionPlayerDeath;
 
+    static class QueuedTransition {
+        final Transition mTransition;
+        final OnStartCollect mOnStartCollect;
+        final BLASTSyncEngine.SyncGroup mLegacySync;
+
+        QueuedTransition(Transition transition, OnStartCollect onStartCollect) {
+            mTransition = transition;
+            mOnStartCollect = onStartCollect;
+            mLegacySync = null;
+        }
+
+        QueuedTransition(BLASTSyncEngine.SyncGroup legacySync, OnStartCollect onStartCollect) {
+            mTransition = null;
+            mOnStartCollect = onStartCollect;
+            mLegacySync = legacySync;
+        }
+    }
+
+    private final ArrayList<QueuedTransition> mQueuedTransitions = new ArrayList<>();
+
     /** The transition currently being constructed (collecting participants). */
     private Transition mCollectingTransition = null;
 
@@ -158,10 +180,20 @@
         mTransitionTracer = wms.mTransitionTracer;
         mIsWaitingForDisplayEnabled = !wms.mDisplayEnabled;
         registerLegacyListener(wms.mActivityManagerAppTransitionNotifier);
+        setSyncEngine(wms.mSyncEngine);
+    }
+
+    @VisibleForTesting
+    void setSyncEngine(BLASTSyncEngine syncEngine) {
+        mSyncEngine = syncEngine;
+        // Check the queue whenever the sync-engine becomes idle.
+        mSyncEngine.addOnIdleListener(this::tryStartCollectFromQueue);
     }
 
     private void detachPlayer() {
         if (mTransitionPlayer == null) return;
+        // Immediately set to null so that nothing inadvertently starts/queues.
+        mTransitionPlayer = null;
         // Clean-up/finish any playing transitions.
         for (int i = 0; i < mPlayingTransitions.size(); ++i) {
             mPlayingTransitions.get(i).cleanUpOnFailure();
@@ -170,7 +202,6 @@
         if (mCollectingTransition != null) {
             mCollectingTransition.abort();
         }
-        mTransitionPlayer = null;
         mTransitionPlayerProc = null;
         mRemotePlayer.clear();
         mRunningLock.doNotifyLocked();
@@ -195,7 +226,7 @@
             throw new IllegalStateException("Simultaneous transition collection not supported"
                     + " yet. Use {@link #createPendingTransition} for explicit queueing.");
         }
-        Transition transit = new Transition(type, flags, this, mAtm.mWindowManager.mSyncEngine);
+        Transition transit = new Transition(type, flags, this, mSyncEngine);
         ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Creating Transition: %s", transit);
         moveToCollecting(transit);
         return transit;
@@ -325,7 +356,7 @@
     /** @return {@code true} if a transition is running */
     boolean inTransition() {
         // TODO(shell-transitions): eventually properly support multiple
-        return isCollecting() || isPlaying();
+        return isCollecting() || isPlaying() || !mQueuedTransitions.isEmpty();
     }
 
     /** @return {@code true} if a transition is running in a participant subtree of wc */
@@ -453,8 +484,7 @@
             // some frames before and after the display projection transaction is applied by the
             // remote player. That may cause some buffers to show in different rotation. So use
             // sync method to pause clients drawing until the projection transaction is applied.
-            mAtm.mWindowManager.mSyncEngine.setSyncMethod(displayTransition.getSyncId(),
-                    BLASTSyncEngine.METHOD_BLAST);
+            mSyncEngine.setSyncMethod(displayTransition.getSyncId(), BLASTSyncEngine.METHOD_BLAST);
         }
         final Rect startBounds = displayChange.getStartAbsBounds();
         final Rect endBounds = displayChange.getEndAbsBounds();
@@ -741,6 +771,31 @@
         mStateValidators.clear();
     }
 
+    void tryStartCollectFromQueue() {
+        if (mQueuedTransitions.isEmpty()) return;
+        // Only need to try the next one since, even when transition can collect in parallel,
+        // they still need to serialize on readiness.
+        final QueuedTransition queued = mQueuedTransitions.get(0);
+        if (mCollectingTransition != null || mSyncEngine.hasActiveSync()) {
+            return;
+        }
+        mQueuedTransitions.remove(0);
+        // This needs to happen immediately to prevent another sync from claiming the syncset
+        // out-of-order (moveToCollecting calls startSyncSet)
+        if (queued.mTransition != null) {
+            moveToCollecting(queued.mTransition);
+        } else {
+            // legacy sync
+            mSyncEngine.startSyncSet(queued.mLegacySync);
+        }
+        // Post this so that the now-playing transition logic isn't interrupted.
+        mAtm.mH.post(() -> {
+            synchronized (mAtm.mGlobalLock) {
+                queued.mOnStartCollect.onCollectStarted(true /* deferred */);
+            }
+        });
+    }
+
     void moveToPlaying(Transition transition) {
         if (transition != mCollectingTransition) {
             throw new IllegalStateException("Trying to move non-collecting transition to playing");
@@ -749,6 +804,7 @@
         mPlayingTransitions.add(transition);
         updateRunningRemoteAnimation(transition, true /* isPlaying */);
         mTransitionTracer.logState(transition);
+        // Sync engine should become idle after this, so the idle listener will check the queue.
     }
 
     void updateAnimatingState(SurfaceControl.Transaction t) {
@@ -758,12 +814,12 @@
             t.setEarlyWakeupStart();
             // Usually transitions put quite a load onto the system already (with all the things
             // happening in app), so pause task snapshot persisting to not increase the load.
-            mAtm.mWindowManager.mSnapshotController.setPause(true);
+            mSnapshotController.setPause(true);
             mAnimatingState = true;
             Transition.asyncTraceBegin("animating", 0x41bfaf1 /* hashcode of TAG */);
         } else if (!animatingState && mAnimatingState) {
             t.setEarlyWakeupEnd();
-            mAtm.mWindowManager.mSnapshotController.setPause(false);
+            mSnapshotController.setPause(false);
             mAnimatingState = false;
             Transition.asyncTraceEnd(0x41bfaf1 /* hashcode of TAG */);
         }
@@ -793,6 +849,7 @@
         transition.abort();
         mCollectingTransition = null;
         mTransitionTracer.logState(transition);
+        // abort will call through the normal finish paths and thus check the queue.
     }
 
     /**
@@ -874,7 +931,7 @@
         if (!mPlayingTransitions.isEmpty()) {
             state = LEGACY_STATE_RUNNING;
         } else if ((mCollectingTransition != null && mCollectingTransition.getLegacyIsReady())
-                || mAtm.mWindowManager.mSyncEngine.hasPendingSyncSets()) {
+                || mSyncEngine.hasPendingSyncSets()) {
             // The transition may not be "ready", but we have a sync-transaction waiting to start.
             // Usually the pending transaction is for a transition, so assuming that is the case,
             // we can't be IDLE for test purposes. Ideally, we should have a STATE_COLLECTING.
@@ -884,6 +941,50 @@
         proto.end(token);
     }
 
+    /** Returns {@code true} if it started collecting, {@code false} if it was queued. */
+    private void queueTransition(Transition transit, OnStartCollect onStartCollect) {
+        mQueuedTransitions.add(new QueuedTransition(transit, onStartCollect));
+        ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS_MIN,
+                "Queueing transition: %s", transit);
+    }
+
+    /** Returns {@code true} if it started collecting, {@code false} if it was queued. */
+    boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect) {
+        if (!mQueuedTransitions.isEmpty()) {
+            // Just add to queue since we already have a queue.
+            queueTransition(transit, onStartCollect);
+            return false;
+        }
+        if (mSyncEngine.hasActiveSync()) {
+            if (!isCollecting()) {
+                Slog.w(TAG, "Ongoing Sync outside of transition.");
+            }
+            queueTransition(transit, onStartCollect);
+            return false;
+        }
+        moveToCollecting(transit);
+        onStartCollect.onCollectStarted(false /* deferred */);
+        return true;
+    }
+
+    /** Returns {@code true} if it started collecting, {@code false} if it was queued. */
+    boolean startLegacySyncOrQueue(BLASTSyncEngine.SyncGroup syncGroup, Runnable applySync) {
+        if (!mQueuedTransitions.isEmpty() || mSyncEngine.hasActiveSync()) {
+            // Just add to queue since we already have a queue.
+            mQueuedTransitions.add(new QueuedTransition(syncGroup, (d) -> applySync.run()));
+            ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS_MIN,
+                    "Queueing legacy sync-set: %s", syncGroup.mSyncId);
+            return false;
+        }
+        mSyncEngine.startSyncSet(syncGroup);
+        applySync.run();
+        return true;
+    }
+
+    interface OnStartCollect {
+        void onCollectStarted(boolean deferred);
+    }
+
     /**
      * This manages the animating state of processes that are running remote animations for
      * {@link #mTransitionPlayerProc}.
diff --git a/services/core/java/com/android/server/wm/TransitionTracer.java b/services/core/java/com/android/server/wm/TransitionTracer.java
index a4c931c..6597d4c 100644
--- a/services/core/java/com/android/server/wm/TransitionTracer.java
+++ b/services/core/java/com/android/server/wm/TransitionTracer.java
@@ -154,6 +154,7 @@
         }
 
         outputStream.write(com.android.server.wm.shell.Transition.TYPE, transition.mType);
+        outputStream.write(com.android.server.wm.shell.Transition.FLAGS, transition.getFlags());
 
         for (int i = 0; i < targets.size(); ++i) {
             final long changeToken = outputStream
@@ -162,6 +163,7 @@
             final Transition.ChangeInfo target = targets.get(i);
 
             final int mode = target.getTransitMode(target.mContainer);
+            final int flags = target.getChangeFlags(target.mContainer);
             final int layerId;
             if (target.mContainer.mSurfaceControl.isValid()) {
                 layerId = target.mContainer.mSurfaceControl.getLayerId();
@@ -170,6 +172,7 @@
             }
 
             outputStream.write(com.android.server.wm.shell.Target.MODE, mode);
+            outputStream.write(com.android.server.wm.shell.Target.FLAGS, flags);
             outputStream.write(com.android.server.wm.shell.Target.LAYER_ID, layerId);
 
             if (mActiveTracingEnabled) {
diff --git a/services/core/java/com/android/server/wm/WallpaperWindowToken.java b/services/core/java/com/android/server/wm/WallpaperWindowToken.java
index 6c38c6f..1ffee05 100644
--- a/services/core/java/com/android/server/wm/WallpaperWindowToken.java
+++ b/services/core/java/com/android/server/wm/WallpaperWindowToken.java
@@ -129,26 +129,10 @@
     }
 
     void updateWallpaperWindows(boolean visible) {
-        boolean changed = false;
         if (mVisibleRequested != visible) {
             ProtoLog.d(WM_DEBUG_WALLPAPER, "Wallpaper token %s visible=%b",
                     token, visible);
             setVisibility(visible);
-            changed = true;
-        }
-        if (mTransitionController.isShellTransitionsEnabled()) {
-            // Apply legacy fixed rotation to wallpaper if it is becoming visible
-            if (!mTransitionController.useShellTransitionsRotation() && changed && visible) {
-                final WindowState wallpaperTarget =
-                        mDisplayContent.mWallpaperController.getWallpaperTarget();
-                if (wallpaperTarget != null && wallpaperTarget.mToken.hasFixedRotationTransform()) {
-                    linkFixedRotationTransform(wallpaperTarget.mToken);
-                }
-            }
-            // If wallpaper is in transition, setVisible() will be called from commitVisibility()
-            // when finishing transition. Otherwise commitVisibility() is already called from above
-            // setVisibility().
-            return;
         }
 
         final WindowState wallpaperTarget =
@@ -172,6 +156,12 @@
                 linkFixedRotationTransform(wallpaperTarget.mToken);
             }
         }
+        if (mTransitionController.isShellTransitionsEnabled()) {
+            // If wallpaper is in transition, setVisible() will be called from commitVisibility()
+            // when finishing transition. Otherwise commitVisibility() is already called from above
+            // setVisibility().
+            return;
+        }
 
         setVisible(visible);
     }
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/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index 32d54d7..cd42528 100644
--- a/services/core/java/com/android/server/wm/WindowOrganizerController.java
+++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java
@@ -231,19 +231,26 @@
                  */
                 final BLASTSyncEngine.SyncGroup syncGroup = prepareSyncWithOrganizer(callback);
                 final int syncId = syncGroup.mSyncId;
-                if (!mService.mWindowManager.mSyncEngine.hasActiveSync()) {
-                    mService.mWindowManager.mSyncEngine.startSyncSet(syncGroup);
-                    applyTransaction(t, syncId, null /*transition*/, caller);
-                    setSyncReady(syncId);
+                if (mTransitionController.isShellTransitionsEnabled()) {
+                    mTransitionController.startLegacySyncOrQueue(syncGroup, () -> {
+                        applyTransaction(t, syncId, null /*transition*/, caller);
+                        setSyncReady(syncId);
+                    });
                 } else {
-                    // Because the BLAST engine only supports one sync at a time, queue the
-                    // transaction.
-                    mService.mWindowManager.mSyncEngine.queueSyncSet(
-                            () -> mService.mWindowManager.mSyncEngine.startSyncSet(syncGroup),
-                            () -> {
-                                applyTransaction(t, syncId, null /*transition*/, caller);
-                                setSyncReady(syncId);
-                            });
+                    if (!mService.mWindowManager.mSyncEngine.hasActiveSync()) {
+                        mService.mWindowManager.mSyncEngine.startSyncSet(syncGroup);
+                        applyTransaction(t, syncId, null /*transition*/, caller);
+                        setSyncReady(syncId);
+                    } else {
+                        // Because the BLAST engine only supports one sync at a time, queue the
+                        // transaction.
+                        mService.mWindowManager.mSyncEngine.queueSyncSet(
+                                () -> mService.mWindowManager.mSyncEngine.startSyncSet(syncGroup),
+                                () -> {
+                                    applyTransaction(t, syncId, null /*transition*/, caller);
+                                    setSyncReady(syncId);
+                                });
+                    }
                 }
                 return syncId;
             }
@@ -280,43 +287,31 @@
                     applyTransaction(t, -1 /* syncId */, null, caller);
                     return null;
                 }
-                // In cases where transition is already provided, the "readiness lifecycle" of the
-                // transition is determined outside of this transaction. However, if this is a
-                // direct call from shell, the entire transition lifecycle is contained in the
-                // provided transaction and thus we can setReady immediately after apply.
-                final boolean needsSetReady = transition == null && t != null;
                 final WindowContainerTransaction wct =
                         t != null ? t : new WindowContainerTransaction();
                 if (transition == null) {
                     if (type < 0) {
                         throw new IllegalArgumentException("Can't create transition with no type");
                     }
-                    // If there is already a collecting transition, queue up a new transition and
-                    // return that. The actual start and apply will then be deferred until that
-                    // transition starts collecting. This should almost never happen except during
-                    // tests.
-                    if (mService.mWindowManager.mSyncEngine.hasActiveSync()) {
-                        Slog.w(TAG, "startTransition() while one is already collecting.");
-                        final Transition nextTransition = new Transition(type, 0 /* flags */,
-                                mTransitionController, mService.mWindowManager.mSyncEngine);
-                        ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
-                                "Creating Pending Transition: %s", nextTransition);
-                        mService.mWindowManager.mSyncEngine.queueSyncSet(
-                                // Make sure to collect immediately to prevent another transition
-                                // from sneaking in before it. Note: moveToCollecting internally
-                                // calls startSyncSet.
-                                () -> mTransitionController.moveToCollecting(nextTransition),
-                                () -> {
-                                    nextTransition.start();
-                                    applyTransaction(wct, -1 /*syncId*/, nextTransition, caller);
-                                    if (needsSetReady) {
-                                        nextTransition.setAllReady();
-                                    }
-                                });
-                        return nextTransition.getToken();
-                    }
-                    transition = mTransitionController.createTransition(type);
+                    // This is a direct call from shell, so the entire transition lifecycle is
+                    // contained in the provided transaction if provided. Thus, we can setReady
+                    // immediately after apply.
+                    final boolean needsSetReady = t != null;
+                    final Transition nextTransition = new Transition(type, 0 /* flags */,
+                            mTransitionController, mService.mWindowManager.mSyncEngine);
+                    mTransitionController.startCollectOrQueue(nextTransition,
+                            (deferred) -> {
+                                nextTransition.start();
+                                nextTransition.mLogger.mStartWCT = wct;
+                                applyTransaction(wct, -1 /*syncId*/, nextTransition, caller);
+                                if (needsSetReady) {
+                                    nextTransition.setAllReady();
+                                }
+                            });
+                    return nextTransition.getToken();
                 }
+                // The transition already started collecting before sending a request to shell,
+                // so just start here.
                 if (!transition.isCollecting() && !transition.isForcePlaying()) {
                     Slog.e(TAG, "Trying to start a transition that isn't collecting. This probably"
                             + " means Shell took too long to respond to a request. WM State may be"
@@ -327,9 +322,8 @@
                 transition.start();
                 transition.mLogger.mStartWCT = wct;
                 applyTransaction(wct, -1 /*syncId*/, transition, caller);
-                if (needsSetReady) {
-                    transition.setAllReady();
-                }
+                // Since the transition is already provided, it means WMCore is determining the
+                // "readiness lifecycle" outside the provided transaction, so don't set ready here.
                 return transition.getToken();
             }
         } finally {
@@ -434,23 +428,8 @@
                 return;
             }
 
-            if (!mService.mWindowManager.mSyncEngine.hasActiveSync()) {
-                // Sync is for either transition or applySyncTransaction(). We don't support
-                // multiple sync at the same time because it may cause conflict.
-                // Create a new transition when there is no active sync to collect the changes.
-                final Transition transition = mTransitionController.createTransition(type);
-                if (applyTransaction(wct, -1 /* syncId */, transition, caller)
-                        == TRANSACT_EFFECTS_NONE && transition.mParticipants.isEmpty()) {
-                    transition.abort();
-                    return;
-                }
-                mTransitionController.requestStartTransition(transition, null /* startTask */,
-                        null /* remoteTransition */, null /* displayChange */);
-                transition.setAllReady();
-                return;
-            }
-
-            if (!shouldApplyIndependently) {
+            if (mService.mWindowManager.mSyncEngine.hasActiveSync()
+                    && !shouldApplyIndependently) {
                 // Although there is an active sync, we want to apply the transaction now.
                 // TODO(b/232042367) Redesign the organizer update on activity callback so that we
                 // we will know about the transition explicitly.
@@ -469,29 +448,23 @@
                 return;
             }
 
-            // It is ok to queue the WCT until the sync engine is free.
-            final Transition nextTransition = new Transition(type, 0 /* flags */,
+            final Transition transition = new Transition(type, 0 /* flags */,
                     mTransitionController, mService.mWindowManager.mSyncEngine);
-            ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
-                    "Creating Pending Transition for TaskFragment: %s", nextTransition);
-            mService.mWindowManager.mSyncEngine.queueSyncSet(
-                    // Make sure to collect immediately to prevent another transition
-                    // from sneaking in before it. Note: moveToCollecting internally
-                    // calls startSyncSet.
-                    () -> mTransitionController.moveToCollecting(nextTransition),
-                    () -> {
-                        if (mTaskFragmentOrganizerController.isValidTransaction(wct)
-                                && (applyTransaction(wct, -1 /* syncId */, nextTransition, caller)
-                                        != TRANSACT_EFFECTS_NONE
-                                || !nextTransition.mParticipants.isEmpty())) {
-                            mTransitionController.requestStartTransition(nextTransition,
-                                    null /* startTask */, null /* remoteTransition */,
-                                    null /* displayChange */);
-                            nextTransition.setAllReady();
-                            return;
-                        }
-                        nextTransition.abort();
-                    });
+            TransitionController.OnStartCollect doApply = (deferred) -> {
+                if (deferred && !mTaskFragmentOrganizerController.isValidTransaction(wct)) {
+                    transition.abort();
+                    return;
+                }
+                if (applyTransaction(wct, -1 /* syncId */, transition, caller)
+                        == TRANSACT_EFFECTS_NONE && transition.mParticipants.isEmpty()) {
+                    transition.abort();
+                    return;
+                }
+                mTransitionController.requestStartTransition(transition, null /* startTask */,
+                        null /* remoteTransition */, null /* displayChange */);
+                transition.setAllReady();
+            };
+            mTransitionController.startCollectOrQueue(transition, doApply);
         } finally {
             Binder.restoreCallingIdentity(ident);
         }
diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java
index 85c601f..dbd9e4b 100644
--- a/services/core/java/com/android/server/wm/WindowProcessController.java
+++ b/services/core/java/com/android/server/wm/WindowProcessController.java
@@ -107,6 +107,12 @@
     private static final String TAG_RELEASE = TAG + POSTFIX_RELEASE;
     private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION;
 
+    private static final int MAX_RAPID_ACTIVITY_LAUNCH_COUNT = 500;
+    private static final long RAPID_ACTIVITY_LAUNCH_MS = 300;
+    private static final long RESET_RAPID_ACTIVITY_LAUNCH_MS = 5 * RAPID_ACTIVITY_LAUNCH_MS;
+
+    private int mRapidActivityLaunchCount;
+
     // all about the first app in the process
     final ApplicationInfo mInfo;
     final String mName;
@@ -538,7 +544,8 @@
         return mLastActivityLaunchTime > 0;
     }
 
-    void setLastActivityLaunchTime(long launchTime) {
+    void setLastActivityLaunchTime(ActivityRecord r) {
+        long launchTime = r.lastLaunchTime;
         if (launchTime <= mLastActivityLaunchTime) {
             if (launchTime < mLastActivityLaunchTime) {
                 Slog.w(TAG,
@@ -547,9 +554,29 @@
             }
             return;
         }
+        updateRapidActivityLaunch(r, launchTime, mLastActivityLaunchTime);
         mLastActivityLaunchTime = launchTime;
     }
 
+    void updateRapidActivityLaunch(ActivityRecord r, long launchTime, long lastLaunchTime) {
+        if (mInstrumenting || mDebugging || lastLaunchTime <= 0) {
+            return;
+        }
+
+        final long diff = lastLaunchTime - launchTime;
+        if (diff < RAPID_ACTIVITY_LAUNCH_MS) {
+            mRapidActivityLaunchCount++;
+        } else if (diff >= RESET_RAPID_ACTIVITY_LAUNCH_MS) {
+            mRapidActivityLaunchCount = 0;
+        }
+
+        if (mRapidActivityLaunchCount > MAX_RAPID_ACTIVITY_LAUNCH_COUNT) {
+            Slog.w(TAG, "Killing " + mPid + " because of rapid activity launch");
+            r.getRootTask().moveTaskToBack(r.getTask());
+            mAtm.mH.post(() -> mAtm.mAmInternal.killProcess(mName, mUid, "rapidActivityLaunch"));
+        }
+    }
+
     void setLastActivityFinishTimeIfNeeded(long finishTime) {
         if (finishTime <= mLastActivityFinishTime || !hasActivityInVisibleTask()) {
             return;
@@ -696,7 +723,7 @@
 
     void addActivityIfNeeded(ActivityRecord r) {
         // even if we already track this activity, note down that it has been launched
-        setLastActivityLaunchTime(r.lastLaunchTime);
+        setLastActivityLaunchTime(r);
         if (mActivities.contains(r)) {
             return;
         }
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/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index 327483e..da54b15 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -119,24 +119,20 @@
         final DisplayInfo mDisplayInfo;
         final DisplayFrames mDisplayFrames;
         final Configuration mRotatedOverrideConfiguration;
-        final SeamlessRotator mRotator;
+
         /**
          * The tokens that share the same transform. Their end time of transform are the same. The
          * list should at least contain the token who creates this state.
          */
         final ArrayList<WindowToken> mAssociatedTokens = new ArrayList<>(3);
-        final ArrayList<WindowContainer<?>> mRotatedContainers = new ArrayList<>(3);
+
         boolean mIsTransforming = true;
 
         FixedRotationTransformState(DisplayInfo rotatedDisplayInfo,
-                DisplayFrames rotatedDisplayFrames, Configuration rotatedConfig,
-                int currentRotation) {
+                DisplayFrames rotatedDisplayFrames, Configuration rotatedConfig) {
             mDisplayInfo = rotatedDisplayInfo;
             mDisplayFrames = rotatedDisplayFrames;
             mRotatedOverrideConfiguration = rotatedConfig;
-            // This will use unrotate as rotate, so the new and old rotation are inverted.
-            mRotator = new SeamlessRotator(rotatedDisplayInfo.rotation, currentRotation,
-                    rotatedDisplayInfo, true /* applyFixedTransformationHint */);
         }
 
         /**
@@ -144,10 +140,8 @@
          * showing the window in a display with different rotation.
          */
         void transform(WindowContainer<?> container) {
-            mRotator.unrotate(container.getPendingTransaction(), container);
-            if (!mRotatedContainers.contains(container)) {
-                mRotatedContainers.add(container);
-            }
+            // The default implementation assumes shell transition is enabled, so the transform
+            // is done by getOrCreateFixedRotationLeash().
         }
 
         /**
@@ -155,6 +149,40 @@
          * be called when the window has the same rotation as display.
          */
         void resetTransform() {
+            for (int i = mAssociatedTokens.size() - 1; i >= 0; --i) {
+                mAssociatedTokens.get(i).removeFixedRotationLeash();
+            }
+        }
+
+        /** The state may not only be used by self. Make sure to leave the influence by others. */
+        void disassociate(WindowToken token) {
+            mAssociatedTokens.remove(token);
+        }
+    }
+
+    private static class FixedRotationTransformStateLegacy extends FixedRotationTransformState {
+        final SeamlessRotator mRotator;
+        final ArrayList<WindowContainer<?>> mRotatedContainers = new ArrayList<>(3);
+
+        FixedRotationTransformStateLegacy(DisplayInfo rotatedDisplayInfo,
+                DisplayFrames rotatedDisplayFrames, Configuration rotatedConfig,
+                int currentRotation) {
+            super(rotatedDisplayInfo, rotatedDisplayFrames, rotatedConfig);
+            // This will use unrotate as rotate, so the new and old rotation are inverted.
+            mRotator = new SeamlessRotator(rotatedDisplayInfo.rotation, currentRotation,
+                    rotatedDisplayInfo, true /* applyFixedTransformationHint */);
+        }
+
+        @Override
+        void transform(WindowContainer<?> container) {
+            mRotator.unrotate(container.getPendingTransaction(), container);
+            if (!mRotatedContainers.contains(container)) {
+                mRotatedContainers.add(container);
+            }
+        }
+
+        @Override
+        void resetTransform() {
             for (int i = mRotatedContainers.size() - 1; i >= 0; i--) {
                 final WindowContainer<?> c = mRotatedContainers.get(i);
                 // If the window is detached (no parent), its surface may have been released.
@@ -164,9 +192,9 @@
             }
         }
 
-        /** The state may not only be used by self. Make sure to leave the influence by others. */
+        @Override
         void disassociate(WindowToken token) {
-            mAssociatedTokens.remove(token);
+            super.disassociate(token);
             mRotatedContainers.remove(token);
         }
     }
@@ -437,8 +465,11 @@
         if (mFixedRotationTransformState != null) {
             mFixedRotationTransformState.disassociate(this);
         }
-        mFixedRotationTransformState = new FixedRotationTransformState(info, displayFrames,
-                new Configuration(config), mDisplayContent.getRotation());
+        config = new Configuration(config);
+        mFixedRotationTransformState = mTransitionController.isShellTransitionsEnabled()
+                ? new FixedRotationTransformState(info, displayFrames, config)
+                : new FixedRotationTransformStateLegacy(info, displayFrames, config,
+                        mDisplayContent.getRotation());
         mFixedRotationTransformState.mAssociatedTokens.add(this);
         mDisplayContent.getDisplayPolicy().simulateLayoutDisplay(displayFrames);
         onFixedRotationStatePrepared();
@@ -508,14 +539,7 @@
         if (state == null) {
             return;
         }
-        if (!mTransitionController.isShellTransitionsEnabled()) {
-            state.resetTransform();
-        } else {
-            // Remove all the leashes
-            for (int i = state.mAssociatedTokens.size() - 1; i >= 0; --i) {
-                state.mAssociatedTokens.get(i).removeFixedRotationLeash();
-            }
-        }
+        state.resetTransform();
         // Clear the flag so if the display will be updated to the same orientation, the transform
         // won't take effect.
         state.mIsTransforming = false;
@@ -589,7 +613,9 @@
     void removeFixedRotationLeash() {
         if (mFixedRotationTransformLeash == null) return;
         final SurfaceControl.Transaction t = getSyncTransaction();
-        t.reparent(getSurfaceControl(), getParentSurfaceControl());
+        if (mSurfaceControl != null) {
+            t.reparent(mSurfaceControl, getParentSurfaceControl());
+        }
         t.remove(mFixedRotationTransformLeash);
         mFixedRotationTransformLeash = null;
     }
diff --git a/services/core/jni/OWNERS b/services/core/jni/OWNERS
index 2584b86..d9acf41 100644
--- a/services/core/jni/OWNERS
+++ b/services/core/jni/OWNERS
@@ -27,3 +27,4 @@
 per-file com_android_server_tv_* = file:/media/java/android/media/tv/OWNERS
 per-file com_android_server_vibrator_* = file:/services/core/java/com/android/server/vibrator/OWNERS
 per-file com_android_server_am_CachedAppOptimizer.cpp = timmurray@google.com, edgararriaga@google.com, dualli@google.com, carmenjackson@google.com, philipcuadra@google.com
+per-file com_android_server_companion_virtual_InputController.cpp = file:/services/companion/java/com/android/server/companion/virtual/OWNERS
diff --git a/services/core/jni/com_android_server_companion_virtual_InputController.cpp b/services/core/jni/com_android_server_companion_virtual_InputController.cpp
index 4898d95..ad098b7 100644
--- a/services/core/jni/com_android_server_companion_virtual_InputController.cpp
+++ b/services/core/jni/com_android_server_companion_virtual_InputController.cpp
@@ -233,44 +233,50 @@
 
 // Native methods for VirtualDpad
 static bool nativeWriteDpadKeyEvent(JNIEnv* env, jobject thiz, jlong ptr, jint androidKeyCode,
-                                    jint action) {
+                                    jint action, jlong eventTimeNanos) {
     VirtualDpad* virtualDpad = reinterpret_cast<VirtualDpad*>(ptr);
-    return virtualDpad->writeDpadKeyEvent(androidKeyCode, action);
+    return virtualDpad->writeDpadKeyEvent(androidKeyCode, action,
+                                          std::chrono::nanoseconds(eventTimeNanos));
 }
 
 // Native methods for VirtualKeyboard
 static bool nativeWriteKeyEvent(JNIEnv* env, jobject thiz, jlong ptr, jint androidKeyCode,
-                                jint action) {
+                                jint action, jlong eventTimeNanos) {
     VirtualKeyboard* virtualKeyboard = reinterpret_cast<VirtualKeyboard*>(ptr);
-    return virtualKeyboard->writeKeyEvent(androidKeyCode, action);
+    return virtualKeyboard->writeKeyEvent(androidKeyCode, action,
+                                          std::chrono::nanoseconds(eventTimeNanos));
 }
 
 // Native methods for VirtualTouchscreen
 static bool nativeWriteTouchEvent(JNIEnv* env, jobject thiz, jlong ptr, jint pointerId,
                                   jint toolType, jint action, jfloat locationX, jfloat locationY,
-                                  jfloat pressure, jfloat majorAxisSize) {
+                                  jfloat pressure, jfloat majorAxisSize, jlong eventTimeNanos) {
     VirtualTouchscreen* virtualTouchscreen = reinterpret_cast<VirtualTouchscreen*>(ptr);
     return virtualTouchscreen->writeTouchEvent(pointerId, toolType, action, locationX, locationY,
-                                               pressure, majorAxisSize);
+                                               pressure, majorAxisSize,
+                                               std::chrono::nanoseconds(eventTimeNanos));
 }
 
 // Native methods for VirtualMouse
 static bool nativeWriteButtonEvent(JNIEnv* env, jobject thiz, jlong ptr, jint buttonCode,
-                                   jint action) {
+                                   jint action, jlong eventTimeNanos) {
     VirtualMouse* virtualMouse = reinterpret_cast<VirtualMouse*>(ptr);
-    return virtualMouse->writeButtonEvent(buttonCode, action);
+    return virtualMouse->writeButtonEvent(buttonCode, action,
+                                          std::chrono::nanoseconds(eventTimeNanos));
 }
 
 static bool nativeWriteRelativeEvent(JNIEnv* env, jobject thiz, jlong ptr, jfloat relativeX,
-                                     jfloat relativeY) {
+                                     jfloat relativeY, jlong eventTimeNanos) {
     VirtualMouse* virtualMouse = reinterpret_cast<VirtualMouse*>(ptr);
-    return virtualMouse->writeRelativeEvent(relativeX, relativeY);
+    return virtualMouse->writeRelativeEvent(relativeX, relativeY,
+                                            std::chrono::nanoseconds(eventTimeNanos));
 }
 
 static bool nativeWriteScrollEvent(JNIEnv* env, jobject thiz, jlong ptr, jfloat xAxisMovement,
-                                   jfloat yAxisMovement) {
+                                   jfloat yAxisMovement, jlong eventTimeNanos) {
     VirtualMouse* virtualMouse = reinterpret_cast<VirtualMouse*>(ptr);
-    return virtualMouse->writeScrollEvent(xAxisMovement, yAxisMovement);
+    return virtualMouse->writeScrollEvent(xAxisMovement, yAxisMovement,
+                                          std::chrono::nanoseconds(eventTimeNanos));
 }
 
 static JNINativeMethod methods[] = {
@@ -283,12 +289,12 @@
         {"nativeOpenUinputTouchscreen", "(Ljava/lang/String;IILjava/lang/String;II)J",
          (void*)nativeOpenUinputTouchscreen},
         {"nativeCloseUinput", "(J)V", (void*)nativeCloseUinput},
-        {"nativeWriteDpadKeyEvent", "(JII)Z", (void*)nativeWriteDpadKeyEvent},
-        {"nativeWriteKeyEvent", "(JII)Z", (void*)nativeWriteKeyEvent},
-        {"nativeWriteButtonEvent", "(JII)Z", (void*)nativeWriteButtonEvent},
-        {"nativeWriteTouchEvent", "(JIIIFFFF)Z", (void*)nativeWriteTouchEvent},
-        {"nativeWriteRelativeEvent", "(JFF)Z", (void*)nativeWriteRelativeEvent},
-        {"nativeWriteScrollEvent", "(JFF)Z", (void*)nativeWriteScrollEvent},
+        {"nativeWriteDpadKeyEvent", "(JIIJ)Z", (void*)nativeWriteDpadKeyEvent},
+        {"nativeWriteKeyEvent", "(JIIJ)Z", (void*)nativeWriteKeyEvent},
+        {"nativeWriteButtonEvent", "(JIIJ)Z", (void*)nativeWriteButtonEvent},
+        {"nativeWriteTouchEvent", "(JIIIFFFFJ)Z", (void*)nativeWriteTouchEvent},
+        {"nativeWriteRelativeEvent", "(JFFJ)Z", (void*)nativeWriteRelativeEvent},
+        {"nativeWriteScrollEvent", "(JFFJ)Z", (void*)nativeWriteScrollEvent},
 };
 
 int register_android_server_companion_virtual_InputController(JNIEnv* env) {
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 a04143a..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);
     }
 
     /**
@@ -89,14 +91,16 @@
     protected void launchUiWithProviderData(ArrayList<ProviderData> providerDataList) {
         mRequestSessionMetric.collectUiCallStartTime(System.nanoTime());
         mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.USER_INTERACTION);
+        cancelExistingPendingIntent();
         try {
-            mClientCallback.onPendingIntent(mCredentialManagerUi.createPendingIntent(
+            mPendingIntent = mCredentialManagerUi.createPendingIntent(
                     RequestInfo.newCreateRequestInfo(
                             mRequestId, mClientRequest,
                             mClientAppInfo.getPackageName(),
                             PermissionUtils.hasPermission(mContext, mClientAppInfo.getPackageName(),
                                     Manifest.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS)),
-                    providerDataList));
+                    providerDataList);
+            mClientCallback.onPendingIntent(mPendingIntent);
         } catch (RemoteException e) {
             mRequestSessionMetric.collectUiReturnedFinalPhase(/*uiReturned=*/ false);
             mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.TERMINATED);
diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
index 8750906..0dee7a4 100644
--- a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
+++ b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
@@ -33,7 +33,6 @@
 import android.os.Looper;
 import android.os.ResultReceiver;
 import android.service.credentials.CredentialProviderInfoFactory;
-import android.util.Log;
 import android.util.Slog;
 
 import java.util.ArrayList;
@@ -124,7 +123,6 @@
 
     public CredentialManagerUi(Context context, int userId,
             CredentialManagerUiCallback callbacks, Set<ComponentName> enabledProviders) {
-        Log.i(TAG, "In CredentialManagerUi constructor");
         mContext = context;
         mUserId = userId;
         mCallbacks = callbacks;
@@ -151,8 +149,6 @@
      */
     public PendingIntent createPendingIntent(
             RequestInfo requestInfo, ArrayList<ProviderData> providerDataList) {
-        Log.i(TAG, "In createPendingIntent");
-
         List<CredentialProviderInfo> allProviders =
                 CredentialProviderInfoFactory.getCredentialProviderServices(
                         mContext,
diff --git a/services/credentials/java/com/android/server/credentials/GetRequestSession.java b/services/credentials/java/com/android/server/credentials/GetRequestSession.java
index 208a4be..0271727 100644
--- a/services/credentials/java/com/android/server/credentials/GetRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/GetRequestSession.java
@@ -19,7 +19,6 @@
 import android.annotation.Nullable;
 import android.content.ComponentName;
 import android.content.Context;
-import android.credentials.CredentialOption;
 import android.credentials.CredentialProviderInfo;
 import android.credentials.GetCredentialException;
 import android.credentials.GetCredentialRequest;
@@ -36,7 +35,6 @@
 
 import java.util.ArrayList;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * Central session for a single getCredentials request. This class listens to the
@@ -56,10 +54,7 @@
         super(context, sessionCallback, lock, userId, callingUid, request, callback,
                 RequestInfo.TYPE_GET, callingAppInfo, enabledProviders, cancellationSignal,
                 startedTimestamp);
-        int numTypes = (request.getCredentialOptions().stream()
-                .map(CredentialOption::getType).collect(
-                        Collectors.toSet())).size(); // Dedupe type strings
-        mRequestSessionMetric.collectGetFlowInitialMetricInfo(numTypes);
+        mRequestSessionMetric.collectGetFlowInitialMetricInfo(request);
     }
 
     /**
@@ -89,11 +84,13 @@
     protected void launchUiWithProviderData(ArrayList<ProviderData> providerDataList) {
         mRequestSessionMetric.collectUiCallStartTime(System.nanoTime());
         mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.USER_INTERACTION);
+        cancelExistingPendingIntent();
         try {
-            mClientCallback.onPendingIntent(mCredentialManagerUi.createPendingIntent(
+            mPendingIntent = mCredentialManagerUi.createPendingIntent(
                     RequestInfo.newGetRequestInfo(
                             mRequestId, mClientRequest, mClientAppInfo.getPackageName()),
-                    providerDataList));
+                    providerDataList);
+            mClientCallback.onPendingIntent(mPendingIntent);
         } catch (RemoteException e) {
             mRequestSessionMetric.collectUiReturnedFinalPhase(/*uiReturned=*/ false);
             mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.TERMINATED);
diff --git a/services/credentials/java/com/android/server/credentials/MetricUtilities.java b/services/credentials/java/com/android/server/credentials/MetricUtilities.java
index 703ab7c..50e5163 100644
--- a/services/credentials/java/com/android/server/credentials/MetricUtilities.java
+++ b/services/credentials/java/com/android/server/credentials/MetricUtilities.java
@@ -43,11 +43,15 @@
     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
     public static final int ZERO = 0;
+    // The number of characters at the end of the string to use as a key
+    public static final int DELTA_CUT = 20;
 
     /**
      * This retrieves the uid of any package name, given a context and a component name for the
@@ -85,6 +89,18 @@
     }
 
     /**
+     * Given the current design, we can designate how the strings in the backend should appear.
+     * This helper method lets us cut strings for our class types.
+     *
+     * @param classtype the classtype string we want to cut to generate a key
+     * @param deltaFromEnd the starting point from the end of the string we wish to begin at
+     * @return the cut up string key we want to use for metric logs
+     */
+    public static String generateMetricKey(String classtype, int deltaFromEnd) {
+        return classtype.substring(classtype.length() - deltaFromEnd);
+    }
+
+    /**
      * A logging utility used primarily for the final phase of the current metric setup.
      *
      * @param finalPhaseMetric     the coalesced data of the chosen provider
@@ -143,7 +159,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);
@@ -151,13 +172,17 @@
     }
 
     /**
-     * A logging utility used primarily for the candidate phase of the current metric setup.
+     * A logging utility used primarily for the candidate phase of the current metric setup. This
+     * will primarily focus on track 2, where the session id is associated with known providers,
+     * but NOT the calling app.
      *
      * @param providers      a map with known providers and their held metric objects
      * @param emitSequenceId an emitted sequence id for the current session
+     * @param initialPhaseMetric contains initial phase data to avoid repetition for candidate
+     *                           phase, track 2, logging
      */
     public static void logApiCalledCandidatePhase(Map<String, ProviderSession> providers,
-            int emitSequenceId) {
+            int emitSequenceId, InitialPhaseMetric initialPhaseMetric) {
         try {
             if (!LOG_FLAG) {
                 return;
@@ -177,6 +202,7 @@
             int[] candidateActionEntryCountList = new int[providerSize];
             int[] candidateAuthEntryCountList = new int[providerSize];
             int[] candidateRemoteEntryCountList = new int[providerSize];
+            String[] frameworkExceptionList = new String[providerSize];
             int index = 0;
             for (var session : providerSessions) {
                 CandidatePhaseMetric metric = session.mProviderSessionMetric
@@ -202,6 +228,7 @@
                 candidateActionEntryCountList[index] = metric.getActionEntryCount();
                 candidateAuthEntryCountList[index] = metric.getAuthenticationEntryCount();
                 candidateRemoteEntryCountList[index] = metric.getRemoteEntryCount();
+                frameworkExceptionList[index] = metric.getFrameworkException();
                 index++;
             }
             FrameworkStatsLog.write(FrameworkStatsLog.CREDENTIAL_MANAGER_CANDIDATE_PHASE_REPORTED,
@@ -222,7 +249,16 @@
                     /* 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,
+                    /* framework_exception_per_provider */
+                    frameworkExceptionList,
+                    /* origin_specified originSpecified */
+                    initialPhaseMetric.isOriginSpecified(),
+                    /* request_unique_classtypes */
+                    initialPhaseMetric.getUniqueRequestStrings(),
+                    /* per_classtype_counts */
+                    initialPhaseMetric.getUniqueRequestCounts()
             );
         } catch (Exception e) {
             Log.w(TAG, "Unexpected error during metric logging: " + e);
@@ -285,8 +321,13 @@
                     /* initial_timestamp_reference_nanoseconds */
                     initialPhaseMetric.getCredentialServiceStartedTimeNanoseconds(),
                     /* count_credential_request_classtypes */
-                    initialPhaseMetric.getCountRequestClassType()
-                    // TODO(b/271135048) - add total count of request options
+                    initialPhaseMetric.getCountRequestClassType(),
+                    /* request_unique_classtypes */
+                    initialPhaseMetric.getUniqueRequestStrings(),
+                    /* per_classtype_counts */
+                    initialPhaseMetric.getUniqueRequestCounts(),
+                    /* origin_specified */
+                    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..441c87b 100644
--- a/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
@@ -59,7 +59,7 @@
         int numTypes = (request.getCredentialOptions().stream()
                 .map(CredentialOption::getType).collect(
                         Collectors.toSet())).size(); // Dedupe type strings
-        mRequestSessionMetric.collectGetFlowInitialMetricInfo(numTypes);
+        mRequestSessionMetric.collectGetFlowInitialMetricInfo(request);
         mPrepareGetCredentialCallback = prepareGetCredentialCallback;
     }
 
diff --git a/services/credentials/java/com/android/server/credentials/ProviderClearSession.java b/services/credentials/java/com/android/server/credentials/ProviderClearSession.java
index 9ec0ecd..8af6b56 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderClearSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderClearSession.java
@@ -91,6 +91,8 @@
     public void onProviderResponseFailure(int errorCode, Exception exception) {
         if (exception instanceof ClearCredentialStateException) {
             mProviderException = (ClearCredentialStateException) exception;
+            // TODO(b/271135048) : Decide on exception type length
+            mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType());
         }
         mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true);
         updateStatusAndInvokeCallback(toStatus(errorCode),
diff --git a/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java b/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java
index 09433db..520b937 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java
@@ -155,6 +155,8 @@
         if (exception instanceof CreateCredentialException) {
             // Store query phase exception for aggregation with final response
             mProviderException = (CreateCredentialException) exception;
+            // TODO(b/271135048) : Decide on exception type length
+            mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType());
         }
         mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true);
         updateStatusAndInvokeCallback(toStatus(errorCode),
diff --git a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
index 0c2b563..a62d9e8 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
@@ -217,6 +217,8 @@
     public void onProviderResponseFailure(int errorCode, Exception exception) {
         if (exception instanceof GetCredentialException) {
             mProviderException = (GetCredentialException) exception;
+            // TODO(b/271135048) : Decide on exception type length
+            mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType());
         }
         mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true);
         updateStatusAndInvokeCallback(toStatus(errorCode),
diff --git a/services/credentials/java/com/android/server/credentials/RemoteCredentialService.java b/services/credentials/java/com/android/server/credentials/RemoteCredentialService.java
index c1e9bc6..0ad73c9 100644
--- a/services/credentials/java/com/android/server/credentials/RemoteCredentialService.java
+++ b/services/credentials/java/com/android/server/credentials/RemoteCredentialService.java
@@ -40,7 +40,6 @@
 import android.service.credentials.IClearCredentialStateCallback;
 import android.service.credentials.ICredentialProviderService;
 import android.text.format.DateUtils;
-import android.util.Log;
 import android.util.Slog;
 
 import com.android.internal.infra.ServiceConnector;
@@ -122,7 +121,6 @@
      */
     public void onBeginGetCredential(@NonNull BeginGetCredentialRequest request,
             ProviderCallbacks<BeginGetCredentialResponse> callback) {
-        Log.i(TAG, "In onGetCredentials in RemoteCredentialService");
         AtomicReference<ICancellationSignal> cancellationSink = new AtomicReference<>();
         AtomicReference<CompletableFuture<BeginGetCredentialResponse>> futureRef =
                 new AtomicReference<>();
@@ -142,7 +140,6 @@
 
                             @Override
                             public void onFailure(String errorType, CharSequence message) {
-                                Log.i(TAG, "In onFailure in RemoteCredentialService");
                                 String errorMsg = message == null ? "" : String.valueOf(
                                         message);
                                 getCredentials.completeExceptionally(
@@ -182,7 +179,6 @@
      */
     public void onBeginCreateCredential(@NonNull BeginCreateCredentialRequest request,
             ProviderCallbacks<BeginCreateCredentialResponse> callback) {
-        Log.i(TAG, "In onCreateCredential in RemoteCredentialService");
         AtomicReference<ICancellationSignal> cancellationSink = new AtomicReference<>();
         AtomicReference<CompletableFuture<BeginCreateCredentialResponse>> futureRef =
                 new AtomicReference<>();
@@ -197,14 +193,11 @@
                                 request, new IBeginCreateCredentialCallback.Stub() {
                                     @Override
                                     public void onSuccess(BeginCreateCredentialResponse response) {
-                                        Log.i(TAG, "In onSuccess onBeginCreateCredential "
-                                                + "in RemoteCredentialService");
                                         createCredentialFuture.complete(response);
                                     }
 
                                     @Override
                                     public void onFailure(String errorType, CharSequence message) {
-                                        Log.i(TAG, "In onFailure in RemoteCredentialService");
                                         String errorMsg = message == null ? "" : String.valueOf(
                                                 message);
                                         createCredentialFuture.completeExceptionally(
@@ -244,7 +237,6 @@
      */
     public void onClearCredentialState(@NonNull ClearCredentialStateRequest request,
             ProviderCallbacks<Void> callback) {
-        Log.i(TAG, "In onClearCredentialState in RemoteCredentialService");
         AtomicReference<ICancellationSignal> cancellationSink = new AtomicReference<>();
         AtomicReference<CompletableFuture<Void>> futureRef = new AtomicReference<>();
 
@@ -258,14 +250,11 @@
                                 request, new IClearCredentialStateCallback.Stub() {
                                     @Override
                                     public void onSuccess() {
-                                        Log.i(TAG, "In onSuccess onClearCredentialState "
-                                                + "in RemoteCredentialService");
                                         clearCredentialFuture.complete(null);
                                     }
 
                                     @Override
                                     public void onFailure(String errorType, CharSequence message) {
-                                        Log.i(TAG, "In onFailure in RemoteCredentialService");
                                         String errorMsg = message == null ? "" :
                                                 String.valueOf(message);
                                         clearCredentialFuture.completeExceptionally(
@@ -300,35 +289,29 @@
             AtomicReference<ICancellationSignal> cancellationSink,
             ProviderCallbacks<T> callback) {
         if (error == null) {
-            Log.i(TAG, "In RemoteCredentialService execute error is null");
             callback.onProviderResponseSuccess(result);
         } else {
             if (error instanceof TimeoutException) {
-                Log.i(TAG, "In RemoteCredentialService execute error is timeout");
+                Slog.d(TAG, "Remote provider response timed tuo for: " + mComponentName);
                 dispatchCancellationSignal(cancellationSink.get());
                 callback.onProviderResponseFailure(
                         CredentialProviderErrors.ERROR_TIMEOUT,
                         null);
             } else if (error instanceof CancellationException) {
-                Log.i(TAG, "In RemoteCredentialService execute error is cancellation");
+                Slog.d(TAG, "Cancellation exception for remote provider: " + mComponentName);
                 dispatchCancellationSignal(cancellationSink.get());
                 callback.onProviderResponseFailure(
                         CredentialProviderErrors.ERROR_TASK_CANCELED,
                         null);
             } else if (error instanceof GetCredentialException) {
-                Log.i(TAG, "In RemoteCredentialService execute error is provider get"
-                        + "error");
                 callback.onProviderResponseFailure(
                         CredentialProviderErrors.ERROR_PROVIDER_FAILURE,
                         (GetCredentialException) error);
             } else if (error instanceof CreateCredentialException) {
-                Log.i(TAG, "In RemoteCredentialService execute error is provider create "
-                        + "error");
                 callback.onProviderResponseFailure(
                         CredentialProviderErrors.ERROR_PROVIDER_FAILURE,
                         (CreateCredentialException) error);
             } else {
-                Log.i(TAG, "In RemoteCredentialService execute error is unknown");
                 callback.onProviderResponseFailure(
                         CredentialProviderErrors.ERROR_UNKNOWN,
                         (Exception) error);
diff --git a/services/credentials/java/com/android/server/credentials/RequestSession.java b/services/credentials/java/com/android/server/credentials/RequestSession.java
index 8fd0269..15a30e4 100644
--- a/services/credentials/java/com/android/server/credentials/RequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/RequestSession.java
@@ -18,6 +18,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.UserIdInt;
+import android.app.PendingIntent;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -90,6 +91,8 @@
 
     private final Set<ComponentName> mEnabledProviders;
 
+    protected PendingIntent mPendingIntent;
+
     @NonNull
     protected RequestSessionStatus mRequestSessionStatus =
             RequestSessionStatus.IN_PROGRESS;
@@ -202,11 +205,23 @@
         if (propagateCancellation) {
             mProviders.values().forEach(ProviderSession::cancelProviderRemoteSession);
         }
+        cancelExistingPendingIntent();
         mRequestSessionStatus = RequestSessionStatus.COMPLETE;
         mProviders.clear();
         clearRequestSessionLocked();
     }
 
+    void cancelExistingPendingIntent() {
+        if (mPendingIntent != null) {
+            try {
+                mPendingIntent.cancel();
+                mPendingIntent = null;
+            } catch (Exception e) {
+                Slog.e(TAG, "Unable to cancel existing pending intent", e);
+            }
+        }
+    }
+
     private void clearRequestSessionLocked() {
         synchronized (mLock) {
             mSessionCallback.onFinishRequestSession(mUserId, mRequestId);
diff --git a/services/credentials/java/com/android/server/credentials/metrics/ApiName.java b/services/credentials/java/com/android/server/credentials/metrics/ApiName.java
index ce84d9a..b99f28d 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/ApiName.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/ApiName.java
@@ -57,7 +57,7 @@
     );
 
     ApiName(int innerMetricCode) {
-        this.mInnerMetricCode = innerMetricCode;
+        mInnerMetricCode = innerMetricCode;
     }
 
     /**
@@ -66,7 +66,7 @@
      * @return a code corresponding to the west world metric name
      */
     public int getMetricCode() {
-        return this.mInnerMetricCode;
+        return mInnerMetricCode;
     }
 
     /**
diff --git a/services/credentials/java/com/android/server/credentials/metrics/ApiStatus.java b/services/credentials/java/com/android/server/credentials/metrics/ApiStatus.java
index 4097765..ece729f 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/ApiStatus.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/ApiStatus.java
@@ -32,7 +32,7 @@
     private final int mInnerMetricCode;
 
     ApiStatus(int innerMetricCode) {
-        this.mInnerMetricCode = innerMetricCode;
+        mInnerMetricCode = innerMetricCode;
     }
 
     /**
@@ -41,6 +41,6 @@
      * @return a code corresponding to the west world metric name
      */
     public int getMetricCode() {
-        return this.mInnerMetricCode;
+        return mInnerMetricCode;
     }
 }
diff --git a/services/credentials/java/com/android/server/credentials/metrics/CandidatePhaseMetric.java b/services/credentials/java/com/android/server/credentials/metrics/CandidatePhaseMetric.java
index 10d4f9c..721d3d7 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/CandidatePhaseMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/CandidatePhaseMetric.java
@@ -73,6 +73,8 @@
     private int mAuthenticationEntryCount = -1;
     // Gathered to pass on to chosen provider when required
     private final IntArray mAvailableEntries = new IntArray();
+    // The *framework only* exception held by this provider, empty string by default
+    private String mFrameworkException = "";
 
     public CandidatePhaseMetric() {
     }
@@ -82,27 +84,27 @@
     /* -- Timestamps -- */
 
     public void setServiceBeganTimeNanoseconds(long serviceBeganTimeNanoseconds) {
-        this.mServiceBeganTimeNanoseconds = serviceBeganTimeNanoseconds;
+        mServiceBeganTimeNanoseconds = serviceBeganTimeNanoseconds;
     }
 
     public void setStartQueryTimeNanoseconds(long startQueryTimeNanoseconds) {
-        this.mStartQueryTimeNanoseconds = startQueryTimeNanoseconds;
+        mStartQueryTimeNanoseconds = startQueryTimeNanoseconds;
     }
 
     public void setQueryFinishTimeNanoseconds(long queryFinishTimeNanoseconds) {
-        this.mQueryFinishTimeNanoseconds = queryFinishTimeNanoseconds;
+        mQueryFinishTimeNanoseconds = queryFinishTimeNanoseconds;
     }
 
     public long getServiceBeganTimeNanoseconds() {
-        return this.mServiceBeganTimeNanoseconds;
+        return mServiceBeganTimeNanoseconds;
     }
 
     public long getStartQueryTimeNanoseconds() {
-        return this.mStartQueryTimeNanoseconds;
+        return mStartQueryTimeNanoseconds;
     }
 
     public long getQueryFinishTimeNanoseconds() {
-        return this.mQueryFinishTimeNanoseconds;
+        return mQueryFinishTimeNanoseconds;
     }
 
     /* -- Actual time delta latencies (for local utility) -- */
@@ -111,8 +113,8 @@
      * Returns the latency in microseconds for the query phase.
      */
     public int getQueryLatencyMicroseconds() {
-        return (int) ((this.getQueryFinishTimeNanoseconds()
-                - this.getStartQueryTimeNanoseconds()) / 1000);
+        return (int) ((getQueryFinishTimeNanoseconds()
+                - getStartQueryTimeNanoseconds()) / 1000);
     }
 
     /* --- Time Stamp Conversion to Microseconds from Reference --- */
@@ -126,32 +128,32 @@
      * @return the microsecond integer timestamp from service start to query began
      */
     public int getTimestampFromReferenceStartMicroseconds(long specificTimestamp) {
-        if (specificTimestamp < this.mServiceBeganTimeNanoseconds) {
+        if (specificTimestamp < mServiceBeganTimeNanoseconds) {
             Log.i(TAG, "The timestamp is before service started, falling back to default int");
             return MetricUtilities.DEFAULT_INT_32;
         }
         return (int) ((specificTimestamp
-                - this.mServiceBeganTimeNanoseconds) / 1000);
+                - mServiceBeganTimeNanoseconds) / 1000);
     }
 
     /* ------------- Provider Query Status ------------ */
 
     public void setProviderQueryStatus(int providerQueryStatus) {
-        this.mProviderQueryStatus = providerQueryStatus;
+        mProviderQueryStatus = providerQueryStatus;
     }
 
     public int getProviderQueryStatus() {
-        return this.mProviderQueryStatus;
+        return mProviderQueryStatus;
     }
 
     /* -------------- Candidate Uid ---------------- */
 
     public void setCandidateUid(int candidateUid) {
-        this.mCandidateUid = candidateUid;
+        mCandidateUid = candidateUid;
     }
 
     public int getCandidateUid() {
-        return this.mCandidateUid;
+        return mCandidateUid;
     }
 
     /* -------------- Session Id ---------------- */
@@ -254,7 +256,7 @@
      *          collector
      */
     public void addEntry(EntryEnum e) {
-        this.mAvailableEntries.add(e.getMetricCode());
+        mAvailableEntries.add(e.getMetricCode());
     }
 
     /**
@@ -267,4 +269,14 @@
     public List<Integer> getAvailableEntries() {
         return Arrays.stream(mAvailableEntries.toArray()).boxed().collect(Collectors.toList());
     }
+
+    /* ------ Framework Exception for this Candidate ------ */
+
+    public void setFrameworkException(String frameworkException) {
+        mFrameworkException = frameworkException;
+    }
+
+    public String getFrameworkException() {
+        return mFrameworkException;
+    }
 }
diff --git a/services/credentials/java/com/android/server/credentials/metrics/ChosenProviderFinalPhaseMetric.java b/services/credentials/java/com/android/server/credentials/metrics/ChosenProviderFinalPhaseMetric.java
index 2eef197..c80cc24 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/ChosenProviderFinalPhaseMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/ChosenProviderFinalPhaseMetric.java
@@ -138,8 +138,8 @@
     }
 
     public int getUiPhaseLatencyMicroseconds() {
-        return (int) ((this.mUiCallEndTimeNanoseconds
-                - this.mUiCallStartTimeNanoseconds) / 1000);
+        return (int) ((mUiCallEndTimeNanoseconds
+                - mUiCallStartTimeNanoseconds) / 1000);
     }
 
     /**
@@ -147,8 +147,8 @@
      * start time to be provided, such as from {@link CandidatePhaseMetric}.
      */
     public int getEntireProviderLatencyMicroseconds() {
-        return (int) ((this.mFinalFinishTimeNanoseconds
-                - this.mQueryStartTimeNanoseconds) / 1000);
+        return (int) ((mFinalFinishTimeNanoseconds
+                - mQueryStartTimeNanoseconds) / 1000);
     }
 
     /**
@@ -156,8 +156,8 @@
      * start time to be provided, such as from {@link InitialPhaseMetric}.
      */
     public int getEntireLatencyMicroseconds() {
-        return (int) ((this.mFinalFinishTimeNanoseconds
-                - this.mServiceBeganTimeNanoseconds) / 1000);
+        return (int) ((mFinalFinishTimeNanoseconds
+                - mServiceBeganTimeNanoseconds) / 1000);
     }
 
     /* ----- Timestamps for Latency ----- */
@@ -183,11 +183,11 @@
     }
 
     public void setUiCallStartTimeNanoseconds(long uiCallStartTimeNanoseconds) {
-        this.mUiCallStartTimeNanoseconds = uiCallStartTimeNanoseconds;
+        mUiCallStartTimeNanoseconds = uiCallStartTimeNanoseconds;
     }
 
     public void setUiCallEndTimeNanoseconds(long uiCallEndTimeNanoseconds) {
-        this.mUiCallEndTimeNanoseconds = uiCallEndTimeNanoseconds;
+        mUiCallEndTimeNanoseconds = uiCallEndTimeNanoseconds;
     }
 
     public void setFinalFinishTimeNanoseconds(long finalFinishTimeNanoseconds) {
@@ -229,12 +229,12 @@
      * @return the microsecond integer timestamp from service start to query began
      */
     public int getTimestampFromReferenceStartMicroseconds(long specificTimestamp) {
-        if (specificTimestamp < this.mServiceBeganTimeNanoseconds) {
+        if (specificTimestamp < mServiceBeganTimeNanoseconds) {
             Log.i(TAG, "The timestamp is before service started, falling back to default int");
             return MetricUtilities.DEFAULT_INT_32;
         }
         return (int) ((specificTimestamp
-                - this.mServiceBeganTimeNanoseconds) / 1000);
+                - mServiceBeganTimeNanoseconds) / 1000);
     }
 
     /* ----------- Provider Status -------------- */
@@ -334,7 +334,7 @@
      * chosen phase in a semantically correct way.
      */
     public void setAvailableEntries(List<Integer> entries) {
-        this.mAvailableEntries = new ArrayList<>(entries); // no alias copy
+        mAvailableEntries = new ArrayList<>(entries); // no alias copy
     }
 
     /**
@@ -345,7 +345,7 @@
      * candidate phase.
      */
     public List<Integer> getAvailableEntries() {
-        return new ArrayList<>(this.mAvailableEntries); // no alias copy
+        return new ArrayList<>(mAvailableEntries); // no alias copy
     }
 
     /* -------------- Has Exception ---------------- */
diff --git a/services/credentials/java/com/android/server/credentials/metrics/EntryEnum.java b/services/credentials/java/com/android/server/credentials/metrics/EntryEnum.java
index 80f9fdc..b9125dd 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/EntryEnum.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/EntryEnum.java
@@ -56,7 +56,7 @@
     );
 
     EntryEnum(int innerMetricCode) {
-        this.mInnerMetricCode = innerMetricCode;
+        mInnerMetricCode = innerMetricCode;
     }
 
     /**
@@ -65,7 +65,7 @@
      * @return a code corresponding to the west world metric name
      */
     public int getMetricCode() {
-        return this.mInnerMetricCode;
+        return mInnerMetricCode;
     }
 
     /**
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..0ecd9cc 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/InitialPhaseMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/InitialPhaseMetric.java
@@ -16,6 +16,11 @@
 
 package com.android.server.credentials.metrics;
 
+import android.util.Log;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
 /**
  * This handles metrics collected prior to any remote calls to providers.
  * Some types are redundant across these metric collectors, but that has debug use-cases as
@@ -32,7 +37,6 @@
     private int mCallerUid = -1;
     // The session id to unite multiple atom emits, default to -1
     private int mSessionId = -1;
-    private int mCountRequestClassType = -1;
 
     // Raw timestamps in nanoseconds, *the only* one logged as such (i.e. 64 bits) since it is a
     // reference point.
@@ -42,6 +46,13 @@
     // 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;
+
+    // Stores the deduped request information, particularly {"req":5}.
+    private Map<String, Integer> mRequestCounts = new LinkedHashMap<>();
+
 
     public InitialPhaseMetric() {
     }
@@ -51,8 +62,8 @@
     /* -- Direct Latency Utility -- */
 
     public int getServiceStartToQueryLatencyMicroseconds() {
-        return (int) ((this.mCredentialServiceStartedTimeNanoseconds
-                - this.mCredentialServiceBeginQueryTimeNanoseconds) / 1000);
+        return (int) ((mCredentialServiceStartedTimeNanoseconds
+                - mCredentialServiceBeginQueryTimeNanoseconds) / 1000);
     }
 
     /* -- Timestamps -- */
@@ -60,7 +71,7 @@
     public void setCredentialServiceStartedTimeNanoseconds(
             long credentialServiceStartedTimeNanoseconds
     ) {
-        this.mCredentialServiceStartedTimeNanoseconds = credentialServiceStartedTimeNanoseconds;
+        mCredentialServiceStartedTimeNanoseconds = credentialServiceStartedTimeNanoseconds;
     }
 
     public void setCredentialServiceBeginQueryTimeNanoseconds(
@@ -108,11 +119,47 @@
 
     /* ------ Count Request Class Types ------ */
 
-    public void setCountRequestClassType(int countRequestClassType) {
-        mCountRequestClassType = countRequestClassType;
+    public int getCountRequestClassType() {
+        return mRequestCounts.size();
     }
 
-    public int getCountRequestClassType() {
-        return mCountRequestClassType;
+    /* ------ Origin Specified ------ */
+
+    public void setOriginSpecified(boolean originSpecified) {
+        mOriginSpecified = originSpecified;
+    }
+
+    public boolean isOriginSpecified() {
+        return mOriginSpecified;
+    }
+
+    /* ------ Unique Request Counts Map Information ------ */
+
+    public void setRequestCounts(Map<String, Integer> requestCounts) {
+        mRequestCounts = requestCounts;
+    }
+
+    /**
+     * Reruns the unique, deduped, request classtypes for logging.
+     * @return a string array for deduped classtypes
+     */
+    public String[] getUniqueRequestStrings() {
+        if (mRequestCounts.isEmpty()) {
+            Log.w(TAG, "There are no unique string request types collected");
+        }
+        String[] result = new String[mRequestCounts.keySet().size()];
+        mRequestCounts.keySet().toArray(result);
+        return result;
+    }
+
+    /**
+     * Reruns the unique, deduped, request classtype counts for logging.
+     * @return a string array for deduped classtype counts
+     */
+    public int[] getUniqueRequestCounts() {
+        if (mRequestCounts.isEmpty()) {
+            Log.w(TAG, "There are no unique string request type counts collected");
+        }
+        return mRequestCounts.values().stream().mapToInt(Integer::intValue).toArray();
     }
 }
diff --git a/services/credentials/java/com/android/server/credentials/metrics/ProviderSessionMetric.java b/services/credentials/java/com/android/server/credentials/metrics/ProviderSessionMetric.java
index 76fd478..9a88255 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/ProviderSessionMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/ProviderSessionMetric.java
@@ -61,6 +61,18 @@
     }
 
     /**
+     * Collects the framework only exception encountered in a candidate flow.
+     * @param exceptionType the string, cut to desired length, of the exception type
+     */
+    public void collectCandidateFrameworkException(String exceptionType) {
+        try {
+            mCandidatePhasePerProviderMetric.setFrameworkException(exceptionType);
+        } catch (Exception e) {
+            Log.w(TAG, "Unexpected error during metric logging: " + e);
+        }
+    }
+
+    /**
      * Used to collect metrics at the update stage when a candidate provider gives back an update.
      *
      * @param isFailureStatus indicates the candidate provider sent back a terminated response
diff --git a/services/credentials/java/com/android/server/credentials/metrics/ProviderStatusForMetrics.java b/services/credentials/java/com/android/server/credentials/metrics/ProviderStatusForMetrics.java
index a12a694..b1e6a4c 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/ProviderStatusForMetrics.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/ProviderStatusForMetrics.java
@@ -38,7 +38,7 @@
     private final int mInnerMetricCode;
 
     ProviderStatusForMetrics(int innerMetricCode) {
-        this.mInnerMetricCode = innerMetricCode;
+        mInnerMetricCode = innerMetricCode;
     }
 
     /**
@@ -47,6 +47,6 @@
      * @return a code corresponding to the west world metric name
      */
     public int getMetricCode() {
-        return this.mInnerMetricCode;
+        return mInnerMetricCode;
     }
 }
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..547c09a 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
@@ -16,10 +16,12 @@
 
 package com.android.server.credentials.metrics;
 
+import static com.android.server.credentials.MetricUtilities.DELTA_CUT;
+import static com.android.server.credentials.MetricUtilities.generateMetricKey;
 import static com.android.server.credentials.MetricUtilities.logApiCalledCandidatePhase;
 import static com.android.server.credentials.MetricUtilities.logApiCalledFinalPhase;
 
-import android.annotation.NonNull;
+import android.credentials.GetCredentialRequest;
 import android.credentials.ui.UserSelectionDialogResult;
 import android.os.IBinder;
 import android.util.Log;
@@ -27,6 +29,7 @@
 import com.android.server.credentials.ProviderSession;
 
 import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -48,7 +51,6 @@
     protected final ChosenProviderFinalPhaseMetric
             mChosenProviderFinalPhaseMetric = new ChosenProviderFinalPhaseMetric();
     // TODO(b/271135048) - Replace this with a new atom per each browsing emit (V4)
-    @NonNull
     protected List<CandidateBrowsingPhaseMetric> mCandidateBrowsingPhaseMetric = new ArrayList<>();
 
     public RequestSessionMetric() {
@@ -149,13 +151,44 @@
     }
 
     /**
-     * Collects request class type count in the RequestSession flow.
+     * Collects initializations for Create 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 collectCreateFlowInitialMetricInfo(boolean origin) {
         try {
-            mInitialPhaseMetric.setCountRequestClassType(requestClassTypeCount);
+            mInitialPhaseMetric.setOriginSpecified(origin);
+        } catch (Exception e) {
+            Log.w(TAG, "Unexpected error during metric logging: " + e);
+        }
+    }
+
+    // Used by get flows to generate the unique request count maps
+    private Map<String, Integer> getRequestCountMap(GetCredentialRequest request) {
+        Map<String, Integer> uniqueRequestCounts = new LinkedHashMap<>();
+        try {
+            request.getCredentialOptions().forEach(option -> {
+                String optionKey = generateMetricKey(option.getType(), DELTA_CUT);
+                if (!uniqueRequestCounts.containsKey(optionKey)) {
+                    uniqueRequestCounts.put(optionKey, 0);
+                }
+                uniqueRequestCounts.put(optionKey, uniqueRequestCounts.get(optionKey) + 1);
+            });
+        } catch (Exception e) {
+            Log.w(TAG, "Unexpected error during get request metric logging: " + e);
+        }
+        return uniqueRequestCounts;
+    }
+
+    /**
+     * Collects initializations for Get flow metrics.
+     *
+     * @param request the get credential request containing information to parse for metrics
+     */
+    public void collectGetFlowInitialMetricInfo(GetCredentialRequest request) {
+        try {
+            mInitialPhaseMetric.setOriginSpecified(request.getOrigin() != null);
+            mInitialPhaseMetric.setRequestCounts(getRequestCountMap(request));
         } catch (Exception e) {
             Log.w(TAG, "Unexpected error during metric logging: " + e);
         }
@@ -291,7 +324,7 @@
      */
     public void logCandidatePhaseMetrics(Map<String, ProviderSession> providers) {
         try {
-            logApiCalledCandidatePhase(providers, ++mSequenceCounter);
+            logApiCalledCandidatePhase(providers, ++mSequenceCounter, mInitialPhaseMetric);
         } 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 f111a95..415440b 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
@@ -27,6 +27,7 @@
 import android.Manifest;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.app.BroadcastOptions;
 import android.app.admin.DevicePolicyIdentifiers;
 import android.app.admin.DevicePolicyManager;
 import android.app.admin.DevicePolicyState;
@@ -353,6 +354,7 @@
                     policyDefinition,
                     userId);
         }
+        sendDevicePolicyChangedToSystem(userId);
     }
 
     /**
@@ -478,6 +480,8 @@
                 enforcingAdmin,
                 policyDefinition,
                 UserHandle.USER_ALL);
+
+        sendDevicePolicyChangedToSystem(UserHandle.USER_ALL);
     }
 
     /**
@@ -628,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
@@ -699,7 +735,7 @@
 
         if (policyDefinition.isGlobalOnlyPolicy()) {
             throw new IllegalArgumentException(policyDefinition.getPolicyKey() + " is a global only"
-                    + "policy.");
+                    + " policy.");
         }
 
         if (!mLocalPolicies.contains(userId)) {
@@ -724,7 +760,7 @@
     private <V> PolicyState<V> getGlobalPolicyStateLocked(PolicyDefinition<V> policyDefinition) {
         if (policyDefinition.isLocalOnlyPolicy()) {
             throw new IllegalArgumentException(policyDefinition.getPolicyKey() + " is a local only"
-                    + "policy.");
+                    + " policy.");
         }
 
         if (!mGlobalPolicies.containsKey(policyDefinition.getPolicyKey())) {
@@ -761,6 +797,20 @@
                 policyValue == null ? null : policyValue.getValue(), mContext, userId);
     }
 
+    private void sendDevicePolicyChangedToSystem(int userId) {
+        Intent intent = new Intent(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
+        intent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+        Bundle options = new BroadcastOptions()
+                .setDeliveryGroupPolicy(BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT)
+                .setDeferralPolicy(BroadcastOptions.DEFERRAL_POLICY_UNTIL_ACTIVE)
+                .toBundle();
+        Binder.withCleanCallingIdentity(() -> mContext.sendBroadcastAsUser(
+                intent,
+                new UserHandle(userId),
+                /* receiverPermissions= */ null,
+                options));
+    }
+
     private <V> void sendPolicyResultToAdmin(
             EnforcingAdmin admin, PolicyDefinition<V> policyDefinition, int result, int userId) {
         Intent intent = new Intent(PolicyUpdateReceiver.ACTION_DEVICE_POLICY_SET_RESULT);
@@ -774,7 +824,7 @@
                             admin.getUserId());
             if (receivers.isEmpty()) {
                 Log.i(TAG, "Couldn't find any receivers that handle ACTION_DEVICE_POLICY_SET_RESULT"
-                        + "in package " + admin.getPackageName());
+                        + " in package " + admin.getPackageName());
                 return;
             }
 
@@ -827,7 +877,7 @@
                             admin.getUserId());
             if (receivers.isEmpty()) {
                 Log.i(TAG, "Couldn't find any receivers that handle ACTION_DEVICE_POLICY_CHANGED"
-                        + "in package " + admin.getPackageName());
+                        + " in package " + admin.getPackageName());
                 return;
             }
 
@@ -850,7 +900,7 @@
         for (ResolveInfo resolveInfo : receivers) {
             if (!Manifest.permission.BIND_DEVICE_ADMIN.equals(
                     resolveInfo.activityInfo.permission)) {
-                Log.w(TAG, "Receiver " + resolveInfo.activityInfo + " is not protected by"
+                Log.w(TAG, "Receiver " + resolveInfo.activityInfo + " is not protected by "
                         + "BIND_DEVICE_ADMIN permission!");
                 continue;
             }
@@ -892,7 +942,7 @@
             mDeviceAdminServiceController.stopServicesForUser(
                     userId, actionForLog);
         } else {
-            for (EnforcingAdmin admin : getEnforcingAdminsForUser(userId)) {
+            for (EnforcingAdmin admin : getEnforcingAdminsOnUser(userId)) {
                 // DPCs are handled separately in DPMS, no need to reestablish the connection here.
                 if (admin.hasAuthority(EnforcingAdmin.DPC_AUTHORITY)) {
                     continue;
@@ -903,47 +953,6 @@
         }
     }
 
-    void handleUserCreated(UserInfo user) {
-        enforcePoliciesOnInheritableProfilesIfApplicable(user);
-    }
-
-    private void enforcePoliciesOnInheritableProfilesIfApplicable(UserInfo user) {
-        if (!user.isProfile()) {
-            return;
-        }
-
-        Binder.withCleanCallingIdentity(() -> {
-            UserProperties userProperties = mUserManager.getUserProperties(user.getUserHandle());
-            if (userProperties == null || userProperties.getInheritDevicePolicy()
-                    != INHERIT_DEVICE_POLICY_FROM_PARENT) {
-                return;
-            }
-
-            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;
-
-            for (Map.Entry<PolicyKey, PolicyState<?>> entry : mLocalPolicies.get(
-                    parentInfo.getUserHandle().getIdentifier()).entrySet()) {
-                enforcePolicyOnUser(userId, entry.getValue());
-            }
-        });
-    }
-
-    private <V> void enforcePolicyOnUser(int userId, PolicyState<V> policyState) {
-        if (!policyState.getPolicyDefinition().isInheritable()) {
-            return;
-        }
-        for (Map.Entry<EnforcingAdmin, PolicyValue<V>> enforcingAdminEntry :
-                policyState.getPoliciesSetByAdmins().entrySet()) {
-            setLocalPolicy(policyState.getPolicyDefinition(),
-                    enforcingAdminEntry.getKey(),
-                    enforcingAdminEntry.getValue(),
-                    userId);
-        }
-    }
-
     /**
      * Handles internal state related to a user getting started.
      */
@@ -979,6 +988,62 @@
     }
 
     /**
+     * Handles internal state related to a user getting removed.
+     */
+    void handleUserRemoved(int userId) {
+        removeLocalPoliciesForUser(userId);
+        removePoliciesForAdminsOnUser(userId);
+    }
+
+    /**
+     * Handles internal state related to a user getting created.
+     */
+    void handleUserCreated(UserInfo user) {
+        enforcePoliciesOnInheritableProfilesIfApplicable(user);
+    }
+
+    private void enforcePoliciesOnInheritableProfilesIfApplicable(UserInfo user) {
+        if (!user.isProfile()) {
+            return;
+        }
+
+        Binder.withCleanCallingIdentity(() -> {
+            UserProperties userProperties = mUserManager.getUserProperties(user.getUserHandle());
+            if (userProperties == null || userProperties.getInheritDevicePolicy()
+                    != INHERIT_DEVICE_POLICY_FROM_PARENT) {
+                return;
+            }
+
+            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 (!mLocalPolicies.contains(parentInfo.getUserHandle().getIdentifier())) {
+                return;
+            }
+            for (Map.Entry<PolicyKey, PolicyState<?>> entry : mLocalPolicies.get(
+                    parentInfo.getUserHandle().getIdentifier()).entrySet()) {
+                enforcePolicyOnUser(userId, entry.getValue());
+            }
+        });
+    }
+
+    private <V> void enforcePolicyOnUser(int userId, PolicyState<V> policyState) {
+        if (!policyState.getPolicyDefinition().isInheritable()) {
+            return;
+        }
+        for (Map.Entry<EnforcingAdmin, PolicyValue<V>> enforcingAdminEntry :
+                policyState.getPoliciesSetByAdmins().entrySet()) {
+            setLocalPolicy(policyState.getPolicyDefinition(),
+                    enforcingAdminEntry.getKey(),
+                    enforcingAdminEntry.getValue(),
+                    userId);
+        }
+    }
+
+    /**
      * Returns all current enforced policies set on the device, and the individual values set by
      * each admin. Global policies are returned under {@link UserHandle#ALL}.
      */
@@ -1006,6 +1071,68 @@
         return new DevicePolicyState(policies);
     }
 
+
+    /**
+     * Removes all local and global policies set by that admin.
+     */
+    void removePoliciesForAdmin(EnforcingAdmin admin) {
+        Set<PolicyKey> globalPolicies = new HashSet<>(mGlobalPolicies.keySet());
+        for (PolicyKey policy : globalPolicies) {
+            PolicyState<?> policyState = mGlobalPolicies.get(policy);
+            if (policyState.getPoliciesSetByAdmins().containsKey(admin)) {
+                removeGlobalPolicy(policyState.getPolicyDefinition(), admin);
+            }
+        }
+
+        for (int i = 0; i < mLocalPolicies.size(); i++) {
+            Set<PolicyKey> localPolicies = new HashSet<>(
+                    mLocalPolicies.get(mLocalPolicies.keyAt(i)).keySet());
+            for (PolicyKey policy : localPolicies) {
+                PolicyState<?> policyState = mLocalPolicies.get(
+                        mLocalPolicies.keyAt(i)).get(policy);
+                if (policyState.getPoliciesSetByAdmins().containsKey(admin)) {
+                    removeLocalPolicy(
+                            policyState.getPolicyDefinition(), admin, mLocalPolicies.keyAt(i));
+                }
+            }
+        }
+    }
+
+    /**
+     * Removes all local policies for the provided {@code userId}.
+     */
+    private void removeLocalPoliciesForUser(int userId) {
+        if (!mLocalPolicies.contains(userId)) {
+            // No policies on user
+            return;
+        }
+
+        Set<PolicyKey> localPolicies = new HashSet<>(mLocalPolicies.get(userId).keySet());
+        for (PolicyKey policy : localPolicies) {
+            PolicyState<?> policyState = mLocalPolicies.get(userId).get(policy);
+            Set<EnforcingAdmin> admins = new HashSet<>(
+                    policyState.getPoliciesSetByAdmins().keySet());
+            for (EnforcingAdmin admin : admins) {
+                removeLocalPolicy(
+                        policyState.getPolicyDefinition(), admin, userId);
+            }
+        }
+
+        mLocalPolicies.remove(userId);
+    }
+
+    /**
+     * Removes all local and global policies for admins installed in the provided
+     * {@code userId}.
+     */
+    private void removePoliciesForAdminsOnUser(int userId) {
+        Set<EnforcingAdmin> admins = getEnforcingAdminsOnUser(userId);
+
+        for (EnforcingAdmin admin : admins) {
+            removePoliciesForAdmin(admin);
+        }
+    }
+
     /**
      * Reestablishes the service that handles
      * {@link DevicePolicyManager#ACTION_DEVICE_ADMIN_SERVICE} in the enforcing admin if the package
@@ -1013,7 +1140,7 @@
      */
     private void updateDeviceAdminServiceOnPackageChanged(
             @NonNull String updatedPackage, int userId) {
-        for (EnforcingAdmin admin : getEnforcingAdminsForUser(userId)) {
+        for (EnforcingAdmin admin : getEnforcingAdminsOnUser(userId)) {
             // DPCs are handled separately in DPMS, no need to reestablish the connection here.
             if (admin.hasAuthority(EnforcingAdmin.DPC_AUTHORITY)) {
                 continue;
@@ -1102,7 +1229,7 @@
     }
 
     @NonNull
-    private Set<EnforcingAdmin> getEnforcingAdminsForUser(int userId) {
+    private Set<EnforcingAdmin> getEnforcingAdminsOnUser(int userId) {
         return mEnforcingAdmins.contains(userId)
                 ? mEnforcingAdmins.get(userId) : Collections.emptySet();
     }
@@ -1119,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);
+
+            }
         }
     }
 
@@ -1141,12 +1293,6 @@
         }
     }
 
-    // TODO: we need to listen for user removal and package removal and update out internal policy
-    //  map and enforcing admins for this is be accurate.
-    boolean hasActivePolicies() {
-        return mEnforcingAdmins.size() > 0;
-    }
-
     private <V> boolean checkFor2gFailure(@NonNull PolicyDefinition<V> policyDefinition,
             @NonNull EnforcingAdmin enforcingAdmin) {
         if (!policyDefinition.getPolicyKey().getIdentifier().equals(
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 94e6e73..f6bc93a 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -19,6 +19,7 @@
 import static android.Manifest.permission.BIND_DEVICE_ADMIN;
 import static android.Manifest.permission.LOCK_DEVICE;
 import static android.Manifest.permission.MANAGE_CA_CERTIFICATES;
+import static android.Manifest.permission.MANAGE_DEFAULT_APPLICATIONS;
 import static android.Manifest.permission.MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT;
 import static android.Manifest.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS;
 import static android.Manifest.permission.MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL;
@@ -59,6 +60,7 @@
 import static android.Manifest.permission.MANAGE_DEVICE_POLICY_RESET_PASSWORD;
 import static android.Manifest.permission.MANAGE_DEVICE_POLICY_RESTRICT_PRIVATE_DNS;
 import static android.Manifest.permission.MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS;
+import static android.Manifest.permission.MANAGE_DEVICE_POLICY_RUN_IN_BACKGROUND;
 import static android.Manifest.permission.MANAGE_DEVICE_POLICY_SAFE_BOOT;
 import static android.Manifest.permission.MANAGE_DEVICE_POLICY_SCREEN_CAPTURE;
 import static android.Manifest.permission.MANAGE_DEVICE_POLICY_SCREEN_CONTENT;
@@ -83,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;
@@ -157,6 +160,7 @@
 import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX;
 import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
 import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
+import static android.app.admin.DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT;
 import static android.app.admin.DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED;
 import static android.app.admin.DevicePolicyManager.PERSONAL_APPS_NOT_SUSPENDED;
 import static android.app.admin.DevicePolicyManager.PERSONAL_APPS_SUSPENDED_EXPLICITLY;
@@ -278,6 +282,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;
@@ -441,7 +446,6 @@
 import android.util.DebugUtils;
 import android.util.IndentingPrintWriter;
 import android.util.IntArray;
-import android.util.Log;
 import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -855,7 +859,7 @@
 
     private static final String ENABLE_DEVICE_POLICY_ENGINE_FOR_FINANCE_FLAG =
             "enable_device_policy_engine";
-    private static final boolean DEFAULT_ENABLE_DEVICE_POLICY_ENGINE_FOR_FINANCE_FLAG = false;
+    private static final boolean DEFAULT_ENABLE_DEVICE_POLICY_ENGINE_FOR_FINANCE_FLAG = true;
 
     // TODO(b/265683382) remove the flag after rollout.
     private static final String KEEP_PROFILES_RUNNING_FLAG = "enable_keep_profiles_running";
@@ -1138,6 +1142,11 @@
                     }
                 }
             }
+
+            if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
+                calculateHasIncompatibleAccounts();
+            }
+
             if (Intent.ACTION_BOOT_COMPLETED.equals(action)
                     && userHandle == mOwners.getDeviceOwnerUserId()) {
                 mBugreportCollectionManager.checkForPendingBugreportAfterBoot();
@@ -1178,6 +1187,9 @@
                         maybeResumeDeviceWideLoggingLocked();
                     }
                 }
+                if (isPolicyEngineForFinanceFlagEnabled() || isPermissionCheckFlagEnabled()) {
+                    mDevicePolicyEngine.handleUserRemoved(userHandle);
+                }
             } else if (Intent.ACTION_USER_STARTED.equals(action)) {
                 sendDeviceOwnerUserCommand(DeviceAdminReceiver.ACTION_USER_STARTED, userHandle);
                 synchronized (getLockObject()) {
@@ -1248,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();
             }
         }
 
@@ -2100,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);
@@ -2126,7 +2141,7 @@
         mUserManagerInternal.addUserLifecycleListener(new UserLifecycleListener());
 
         mDeviceManagementResourcesProvider.load();
-        if (isPermissionCheckFlagEnabled()) {
+        if (isPermissionCheckFlagEnabled() || isPolicyEngineForFinanceFlagEnabled()) {
             mDevicePolicyEngine.load();
         }
 
@@ -3275,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);
         }
@@ -3588,7 +3605,7 @@
         }
 
         startOwnerService(userId, "start-user");
-        if (isPermissionCheckFlagEnabled()) {
+        if (isPermissionCheckFlagEnabled() || isPolicyEngineForFinanceFlagEnabled()) {
             mDevicePolicyEngine.handleStartUser(userId);
         }
     }
@@ -3615,7 +3632,7 @@
 
     void handleUnlockUser(int userId) {
         startOwnerService(userId, "unlock-user");
-        if (isPermissionCheckFlagEnabled()) {
+        if (isPermissionCheckFlagEnabled() || isPolicyEngineForFinanceFlagEnabled()) {
             mDevicePolicyEngine.handleUnlockUser(userId);
         }
     }
@@ -3627,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);
         }
     }
@@ -3663,6 +3680,9 @@
         }
         for (Integer userId : deletedUsers) {
             removeUserData(userId);
+            if (isPolicyEngineForFinanceFlagEnabled() || isPermissionCheckFlagEnabled()) {
+                mDevicePolicyEngine.handleUserRemoved(userId);
+            }
         }
     }
 
@@ -4137,8 +4157,9 @@
         checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_REMOVE_ACTIVE_ADMIN);
         enforceUserUnlocked(userHandle);
 
+        ActiveAdmin admin;
         synchronized (getLockObject()) {
-            ActiveAdmin admin = getActiveAdminUncheckedLocked(adminReceiver, userHandle);
+            admin = getActiveAdminUncheckedLocked(adminReceiver, userHandle);
             if (admin == null) {
                 return;
             }
@@ -4149,10 +4170,14 @@
                         + adminReceiver);
                 return;
             }
-
             mInjector.binderWithCleanCallingIdentity(() ->
                     removeActiveAdminLocked(adminReceiver, userHandle));
         }
+        if (isPolicyEngineForFinanceFlagEnabled() || isPermissionCheckFlagEnabled()) {
+            mDevicePolicyEngine.removePoliciesForAdmin(
+                    EnforcingAdmin.createEnterpriseEnforcingAdmin(
+                            adminReceiver, userHandle, admin));
+        }
     }
 
     private boolean canSetPasswordQualityOnParent(String packageName, final CallerIdentity caller) {
@@ -5840,8 +5865,7 @@
                 // would allow bypassing of the maximum time to lock.
                 mInjector.settingsGlobalPutInt(Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
             }
-            getPowerManagerInternal().setMaximumScreenOffTimeoutFromDeviceAdmin(
-                    UserHandle.USER_SYSTEM, timeMs);
+            getPowerManagerInternal().setMaximumScreenOffTimeoutFromDeviceAdmin(parentId, timeMs);
         });
     }
 
@@ -7699,30 +7723,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
@@ -7767,12 +7833,14 @@
                 // Explicit behaviour
                 if (factoryReset) {
                     // TODO(b/254031494) Replace with new factory reset permission checks
-                    boolean hasPermission = isDeviceOwnerUserId(userId)
-                            || (isOrganizationOwnedDeviceWithManagedProfile()
-                            && calledOnParentInstance);
-                    Preconditions.checkState(hasPermission,
-                            "Admin %s does not have permission to factory reset the device.",
-                            userId);
+                    if (!isPermissionCheckFlagEnabled()) {
+                        boolean hasPermission = isDeviceOwnerUserId(userId)
+                                || (isOrganizationOwnedDeviceWithManagedProfile()
+                                && calledOnParentInstance);
+                        Preconditions.checkCallAuthorization(hasPermission,
+                                "Admin %s does not have permission to factory reset the device.",
+                                userId);
+                    }
                     wipeDevice = true;
                 } else {
                     Preconditions.checkCallAuthorization(!isSystemUser,
@@ -9130,9 +9198,15 @@
                     MANAGE_DEVICE_POLICY_CAMERA,
                     caller.getPackageName(),
                     getProfileParentUserIfRequested(userId, parent));
-
-            setBackwardCompatibleUserRestriction(
-                    caller, enforcingAdmin, UserManager.DISALLOW_CAMERA, disabled, parent);
+            try {
+                setBackwardCompatibleUserRestriction(
+                        caller, enforcingAdmin, UserManager.DISALLOW_CAMERA, disabled, parent);
+            } catch (IllegalStateException e) {
+                throw new IllegalStateException(
+                        "Please use addUserRestriction or addUserRestrictionGlobally using the key"
+                                + " UserManager.DISALLOW_CAMERA to disable the camera locally or"
+                                + " globally, respectively");
+            }
         } else {
             Objects.requireNonNull(who, "ComponentName is null");
             if (parent) {
@@ -9501,6 +9575,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);
@@ -9989,6 +10064,12 @@
         toggleBackupServiceActive(UserHandle.USER_SYSTEM, true);
         pushUserControlDisabledPackagesLocked(userId);
         setGlobalSettingDeviceOwnerType(DEVICE_OWNER_TYPE_DEFAULT);
+
+        if (isPolicyEngineForFinanceFlagEnabled() || isPermissionCheckFlagEnabled()) {
+            mDevicePolicyEngine.removePoliciesForAdmin(
+                    EnforcingAdmin.createEnterpriseEnforcingAdmin(
+                            admin.info.getComponent(), userId, admin));
+        }
     }
 
     private void clearApplicationRestrictions(int userId) {
@@ -10136,6 +10217,12 @@
         toggleBackupServiceActive(userId, true);
         applyProfileRestrictionsIfDeviceOwnerLocked();
         setNetworkLoggingActiveInternal(false);
+
+        if (isPolicyEngineForFinanceFlagEnabled() || isPermissionCheckFlagEnabled()) {
+            mDevicePolicyEngine.removePoliciesForAdmin(
+                    EnforcingAdmin.createEnterpriseEnforcingAdmin(
+                            admin.info.getComponent(), userId, admin));
+        }
     }
 
     @Override
@@ -10178,7 +10265,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);
 
@@ -10968,8 +11057,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;
@@ -10983,17 +11071,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();
@@ -11021,6 +11098,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);
     }
@@ -11557,7 +11644,7 @@
                         caller.getUserId());
             }
             setBackwardsCompatibleAppRestrictions(
-                    packageName, restrictions, caller.getUserHandle());
+                    caller, packageName, restrictions, caller.getUserHandle());
         } else {
             Preconditions.checkCallAuthorization((caller.hasAdminComponent()
                     && (isProfileOwner(caller) || isDefaultDeviceOwner(caller)))
@@ -11578,17 +11665,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) {
@@ -13131,19 +13229,22 @@
         }
         int userId = caller.getUserId();
 
-        if (!UserRestrictionsUtils.isValidRestriction(key)) {
-            return;
-        }
         checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_SET_USER_RESTRICTION);
 
         if (isPolicyEngineForFinanceFlagEnabled()) {
-            int affectedUserId = parent ? getProfileParentId(userId) : userId;
-            EnforcingAdmin admin = enforcePermissionForUserRestriction(
-                    who,
-                    key,
-                    caller.getPackageName(),
-                    affectedUserId);
-            if (mInjector.isChangeEnabled(ENABLE_COEXISTENCE_CHANGE, callerPackage, userId)) {
+            if (!isDeviceOwner(caller) && !isProfileOwner(caller)) {
+                if (!mInjector.isChangeEnabled(ENABLE_COEXISTENCE_CHANGE, callerPackage, userId)) {
+                    throw new IllegalStateException("Calling package is not targeting Android U.");
+                }
+                if (!UserRestrictionsUtils.isValidRestriction(key)) {
+                    throw new IllegalArgumentException("Invalid restriction key: " + key);
+                }
+                int affectedUserId = parent ? getProfileParentId(userId) : userId;
+                EnforcingAdmin admin = enforcePermissionForUserRestriction(
+                        who,
+                        key,
+                        caller.getPackageName(),
+                        affectedUserId);
                 PolicyDefinition<Boolean> policyDefinition =
                         PolicyDefinition.getPolicyDefinitionForUserRestriction(key);
                 if (enabledFromThisOwner) {
@@ -13155,7 +13256,8 @@
                         setGlobalUserRestrictionInternal(admin, key, /* enabled= */ false);
                     }
                     if (!policyDefinition.isGlobalOnlyPolicy()) {
-                        setLocalUserRestrictionInternal(admin, key, /* enabled= */ false, userId);
+                        setLocalUserRestrictionInternal(admin, key, /* enabled= */ false,
+                                userId);
 
                         int parentUserId = getProfileParentId(userId);
                         if (parentUserId != userId) {
@@ -13165,49 +13267,21 @@
                     }
                 }
             } else {
+                if (!UserRestrictionsUtils.isValidRestriction(key)) {
+                    return;
+                }
+                Objects.requireNonNull(who, "ComponentName is null");
+                EnforcingAdmin admin = getEnforcingAdminForCaller(who, callerPackage);
+                checkAdminCanSetRestriction(caller, parent, key);
                 setBackwardCompatibleUserRestriction(
                         caller, admin, key, enabledFromThisOwner, parent);
             }
         } else {
+            if (!UserRestrictionsUtils.isValidRestriction(key)) {
+                return;
+            }
             Objects.requireNonNull(who, "ComponentName is null");
-            if (parent) {
-                Preconditions.checkCallAuthorization(
-                        isProfileOwnerOfOrganizationOwnedDevice(caller));
-            } else {
-                Preconditions.checkCallAuthorization(
-                        isDeviceOwner(caller) || isProfileOwner(caller));
-            }
-            synchronized (getLockObject()) {
-                if (isDefaultDeviceOwner(caller)) {
-                    if (!UserRestrictionsUtils.canDeviceOwnerChange(key)) {
-                        throw new SecurityException("Device owner cannot set user restriction "
-                                + key);
-                    }
-                    Preconditions.checkArgument(!parent,
-                            "Cannot use the parent instance in Device Owner mode");
-                } else if (isFinancedDeviceOwner(caller)) {
-                    if (!UserRestrictionsUtils.canFinancedDeviceOwnerChange(key)) {
-                        throw new SecurityException("Cannot set user restriction " + key
-                                + " when managing a financed device");
-                    }
-                    Preconditions.checkArgument(!parent,
-                            "Cannot use the parent instance in Financed Device Owner"
-                                    + " mode");
-                } else {
-                    boolean profileOwnerCanChangeOnItself = !parent
-                            && UserRestrictionsUtils.canProfileOwnerChange(
-                            key, userId == getMainUserId());
-                    boolean orgOwnedProfileOwnerCanChangeGlobally = parent
-                            && isProfileOwnerOfOrganizationOwnedDevice(caller)
-                            && UserRestrictionsUtils.canProfileOwnerOfOrganizationOwnedDeviceChange(
-                            key);
-
-                    if (!profileOwnerCanChangeOnItself && !orgOwnedProfileOwnerCanChangeGlobally) {
-                        throw new SecurityException("Profile owner cannot set user restriction "
-                                + key);
-                    }
-                }
-            }
+            checkAdminCanSetRestriction(caller, parent, key);
             synchronized (getLockObject()) {
                 final ActiveAdmin activeAdmin = getParentOfAdminIfRequired(
                         getProfileOwnerOrDeviceOwnerLocked(userId), parent);
@@ -13224,6 +13298,46 @@
         logUserRestrictionCall(key, enabledFromThisOwner, parent, caller);
     }
 
+    private void checkAdminCanSetRestriction(CallerIdentity caller, boolean parent, String key) {
+        if (parent) {
+            Preconditions.checkCallAuthorization(
+                    isProfileOwnerOfOrganizationOwnedDevice(caller));
+        } else {
+            Preconditions.checkCallAuthorization(
+                    isDeviceOwner(caller) || isProfileOwner(caller));
+        }
+        synchronized (getLockObject()) {
+            if (isDefaultDeviceOwner(caller)) {
+                if (!UserRestrictionsUtils.canDeviceOwnerChange(key)) {
+                    throw new SecurityException("Device owner cannot set user restriction "
+                            + key);
+                }
+                Preconditions.checkArgument(!parent,
+                        "Cannot use the parent instance in Device Owner mode");
+            } else if (isFinancedDeviceOwner(caller)) {
+                if (!UserRestrictionsUtils.canFinancedDeviceOwnerChange(key)) {
+                    throw new SecurityException("Cannot set user restriction " + key
+                            + " when managing a financed device");
+                }
+                Preconditions.checkArgument(!parent,
+                        "Cannot use the parent instance in Financed Device Owner"
+                                + " mode");
+            } else {
+                boolean profileOwnerCanChangeOnItself = !parent
+                        && UserRestrictionsUtils.canProfileOwnerChange(
+                        key, caller.getUserId() == getMainUserId());
+                boolean orgOwnedProfileOwnerCanChangeGlobally = parent
+                        && isProfileOwnerOfOrganizationOwnedDevice(caller)
+                        && UserRestrictionsUtils.canProfileOwnerOfOrganizationOwnedDeviceChange(
+                        key);
+
+                if (!profileOwnerCanChangeOnItself && !orgOwnedProfileOwnerCanChangeGlobally) {
+                    throw new SecurityException("Profile owner cannot set user restriction "
+                            + key);
+                }
+            }
+        }
+    }
     private void setBackwardCompatibleUserRestriction(
             CallerIdentity caller, EnforcingAdmin admin, String key, boolean enabled,
             boolean parent) {
@@ -13245,6 +13359,9 @@
                             ? getProfileParentId(caller.getUserId()) : caller.getUserId();
                     setLocalUserRestrictionInternal(admin, key, enabled, affectedUserId);
                 }
+            } else {
+                throw new IllegalStateException("Non-DO/Non-PO cannot set restriction " + key
+                        + " while targetSdkVersion is less than UPSIDE_DOWN_CAKE");
             }
         }
     }
@@ -13252,33 +13369,34 @@
     @Override
     public void setUserRestrictionGlobally(String callerPackage, String key) {
         final CallerIdentity caller = getCallerIdentity(callerPackage);
-        if (!UserRestrictionsUtils.isValidRestriction(key)) {
-            return;
-        }
 
         checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_SET_USER_RESTRICTION);
 
         if (!isPolicyEngineForFinanceFlagEnabled()) {
             throw new IllegalStateException("Feature flag is not enabled.");
         }
-
+        if (isDeviceOwner(caller) || isProfileOwner(caller)) {
+            throw new IllegalStateException("Admins are not allowed to call this API.");
+        }
         if (!mInjector.isChangeEnabled(
                 ENABLE_COEXISTENCE_CHANGE, callerPackage, caller.getUserId())) {
             throw new IllegalStateException("Calling package is not targeting Android U.");
         }
+        if (!UserRestrictionsUtils.isValidRestriction(key)) {
+            throw new IllegalArgumentException("Invalid restriction key: " + key);
+        }
 
         EnforcingAdmin admin = enforcePermissionForUserRestriction(
                 /* who= */ null,
                 key,
                 caller.getPackageName(),
-                caller.getUserId()
+                UserHandle.USER_ALL
         );
 
         setGlobalUserRestrictionInternal(admin, key, /* enabled= */ true);
 
         logUserRestrictionCall(key, /* enabled= */ true, /* parent= */ false, caller);
     }
-
     private void setLocalUserRestrictionInternal(
             EnforcingAdmin admin, String key, boolean enabled, int userId) {
         PolicyDefinition<Boolean> policyDefinition =
@@ -13296,7 +13414,6 @@
                     userId);
         }
     }
-
     private void setGlobalUserRestrictionInternal(
             EnforcingAdmin admin, String key, boolean enabled) {
         PolicyDefinition<Boolean> policyDefinition =
@@ -13416,14 +13533,25 @@
             int targetUserId = parent
                     ? getProfileParentId(caller.getUserId()) : caller.getUserId();
             EnforcingAdmin admin = getEnforcingAdminForCaller(who, callerPackage);
-            Bundle restrictions = getUserRestrictionsFromPolicyEngine(admin, targetUserId);
-            // Add global restrictions set by the admin as well if admin is not targeting Android U.
-            if (!mInjector.isChangeEnabled(
-                    ENABLE_COEXISTENCE_CHANGE, callerPackage, caller.getUserId())) {
+            if (isDeviceOwner(caller) || isProfileOwner(caller)) {
+                Objects.requireNonNull(who, "ComponentName is null");
+                Preconditions.checkCallAuthorization(isDefaultDeviceOwner(caller)
+                        || isFinancedDeviceOwner(caller)
+                        || isProfileOwner(caller)
+                        || (parent && isProfileOwnerOfOrganizationOwnedDevice(caller)));
+
+                Bundle restrictions = getUserRestrictionsFromPolicyEngine(admin, targetUserId);
+                // Add global restrictions set by the admin as well.
                 restrictions.putAll(
                         getUserRestrictionsFromPolicyEngine(admin, UserHandle.USER_ALL));
+                return restrictions;
+            } else {
+                if (!mInjector.isChangeEnabled(
+                        ENABLE_COEXISTENCE_CHANGE, callerPackage, caller.getUserId())) {
+                    throw new IllegalStateException("Calling package is not targeting Android U.");
+                }
+                return getUserRestrictionsFromPolicyEngine(admin, targetUserId);
             }
-            return restrictions;
         } else {
             Objects.requireNonNull(who, "ComponentName is null");
             Preconditions.checkCallAuthorization(isDefaultDeviceOwner(caller)
@@ -13439,164 +13567,162 @@
     }
 
     // Map of user restriction to permission.
-    private static final HashMap<String, String> USER_RESTRICTION_PERMISSIONS = new HashMap<>();
+    private static final HashMap<String, String[]> USER_RESTRICTION_PERMISSIONS = new HashMap<>();
     {
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.ENSURE_VERIFY_APPS, MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES);
+                UserManager.ALLOW_PARENT_PROFILE_APP_LINKING, new String[]{MANAGE_DEVICE_POLICY_PROFILES});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_WIFI_TETHERING, MANAGE_DEVICE_POLICY_WIFI);
+                UserManager.DISALLOW_ADD_CLONE_PROFILE, new String[]{MANAGE_DEVICE_POLICY_PROFILES});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_WIFI_DIRECT, MANAGE_DEVICE_POLICY_WIFI);
+                UserManager.DISALLOW_ADD_USER, new String[]{MANAGE_DEVICE_POLICY_USERS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_USER_SWITCH, MANAGE_DEVICE_POLICY_USERS);
+                UserManager.DISALLOW_ADD_WIFI_CONFIG, new String[]{MANAGE_DEVICE_POLICY_WIFI});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_USB_FILE_TRANSFER, MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER);
+                UserManager.DISALLOW_ADJUST_VOLUME, new String[]{MANAGE_DEVICE_POLICY_AUDIO_OUTPUT});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_UNMUTE_MICROPHONE, MANAGE_DEVICE_POLICY_MICROPHONE);
+                UserManager.DISALLOW_AIRPLANE_MODE, new String[]{MANAGE_DEVICE_POLICY_AIRPLANE_MODE});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_UNMUTE_DEVICE, MANAGE_DEVICE_POLICY_AUDIO_OUTPUT);
+                UserManager.DISALLOW_AMBIENT_DISPLAY, new String[]{MANAGE_DEVICE_POLICY_DISPLAY});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_UNINSTALL_APPS, MANAGE_DEVICE_POLICY_APPS_CONTROL);
+                UserManager.DISALLOW_APPS_CONTROL, new String[]{MANAGE_DEVICE_POLICY_APPS_CONTROL});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_UNIFIED_PASSWORD, MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS);
+                UserManager.DISALLOW_AUTOFILL, new String[]{MANAGE_DEVICE_POLICY_AUTOFILL});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_SYSTEM_ERROR_DIALOGS, MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS);
+                UserManager.DISALLOW_BLUETOOTH, new String[]{MANAGE_DEVICE_POLICY_BLUETOOTH});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_SMS, MANAGE_DEVICE_POLICY_SMS);
+                UserManager.DISALLOW_BLUETOOTH_SHARING, new String[]{MANAGE_DEVICE_POLICY_BLUETOOTH});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_SHARING_ADMIN_CONFIGURED_WIFI, MANAGE_DEVICE_POLICY_WIFI);
+                UserManager.DISALLOW_CAMERA, new String[]{MANAGE_DEVICE_POLICY_CAMERA});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_SHARE_LOCATION, MANAGE_DEVICE_POLICY_LOCATION);
+                UserManager.DISALLOW_CAMERA_TOGGLE, new String[]{MANAGE_DEVICE_POLICY_CAMERA_TOGGLE});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE,
-                MANAGE_DEVICE_POLICY_PROFILE_INTERACTION);
+                UserManager.DISALLOW_CELLULAR_2G, new String[]{MANAGE_DEVICE_POLICY_MOBILE_NETWORK});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_SET_WALLPAPER, MANAGE_DEVICE_POLICY_WALLPAPER);
+                UserManager.DISALLOW_CHANGE_WIFI_STATE, new String[]{MANAGE_DEVICE_POLICY_WIFI});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_SET_USER_ICON, MANAGE_DEVICE_POLICY_USERS);
+                UserManager.DISALLOW_CONFIG_BLUETOOTH, new String[]{MANAGE_DEVICE_POLICY_BLUETOOTH});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_SAFE_BOOT, MANAGE_DEVICE_POLICY_SAFE_BOOT);
+                UserManager.DISALLOW_CONFIG_BRIGHTNESS, new String[]{MANAGE_DEVICE_POLICY_DISPLAY});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_RUN_IN_BACKGROUND, MANAGE_DEVICE_POLICY_SAFE_BOOT);
+                UserManager.DISALLOW_CONFIG_CELL_BROADCASTS, new String[]{MANAGE_DEVICE_POLICY_MOBILE_NETWORK});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_REMOVE_USER, MANAGE_DEVICE_POLICY_USERS);
+                UserManager.DISALLOW_CONFIG_CREDENTIALS, new String[]{MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_PRINTING, MANAGE_DEVICE_POLICY_PRINTING);
+                UserManager.DISALLOW_CONFIG_DATE_TIME, new String[]{MANAGE_DEVICE_POLICY_TIME});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_OUTGOING_CALLS, MANAGE_DEVICE_POLICY_CALLS);
+                UserManager.DISALLOW_CONFIG_DEFAULT_APPS, new String[]{MANAGE_DEFAULT_APPLICATIONS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_OUTGOING_BEAM, MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION);
+                UserManager.DISALLOW_CONFIG_LOCALE, new String[]{MANAGE_DEVICE_POLICY_LOCALE});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_NETWORK_RESET, MANAGE_DEVICE_POLICY_MOBILE_NETWORK);
+                UserManager.DISALLOW_CONFIG_LOCATION, new String[]{MANAGE_DEVICE_POLICY_LOCATION});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA, MANAGE_DEVICE_POLICY_PHYSICAL_MEDIA);
+                UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, new String[]{MANAGE_DEVICE_POLICY_MOBILE_NETWORK});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_MODIFY_ACCOUNTS, MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT);
+                UserManager.DISALLOW_CONFIG_PRIVATE_DNS, new String[]{MANAGE_DEVICE_POLICY_RESTRICT_PRIVATE_DNS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_MICROPHONE_TOGGLE, MANAGE_DEVICE_POLICY_MICROPHONE);
+                UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT, new String[]{MANAGE_DEVICE_POLICY_DISPLAY});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY,
-                MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES);
+                UserManager.DISALLOW_CONFIG_TETHERING, new String[]{MANAGE_DEVICE_POLICY_MOBILE_NETWORK});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES,
-                MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES);
+                UserManager.DISALLOW_CONFIG_VPN, new String[]{MANAGE_DEVICE_POLICY_VPN});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_INSTALL_APPS, MANAGE_DEVICE_POLICY_APPS_CONTROL);
+                UserManager.DISALLOW_CONFIG_WIFI, new String[]{MANAGE_DEVICE_POLICY_WIFI});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_FUN, MANAGE_DEVICE_POLICY_FUN);
+                UserManager.DISALLOW_CONTENT_CAPTURE, new String[]{MANAGE_DEVICE_POLICY_SCREEN_CONTENT});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_FACTORY_RESET, MANAGE_DEVICE_POLICY_FACTORY_RESET);
+                UserManager.DISALLOW_CONTENT_SUGGESTIONS, new String[]{MANAGE_DEVICE_POLICY_SCREEN_CONTENT});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_DEBUGGING_FEATURES, MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES);
+                UserManager.DISALLOW_CREATE_WINDOWS, new String[]{MANAGE_DEVICE_POLICY_WINDOWS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_DATA_ROAMING, MANAGE_DEVICE_POLICY_MOBILE_NETWORK);
+                UserManager.DISALLOW_CROSS_PROFILE_COPY_PASTE, new String[]{MANAGE_DEVICE_POLICY_PROFILE_INTERACTION});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CROSS_PROFILE_COPY_PASTE,
-                MANAGE_DEVICE_POLICY_PROFILE_INTERACTION);
+                UserManager.DISALLOW_DATA_ROAMING, new String[]{MANAGE_DEVICE_POLICY_MOBILE_NETWORK});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CREATE_WINDOWS, MANAGE_DEVICE_POLICY_WINDOWS);
+                UserManager.DISALLOW_DEBUGGING_FEATURES, new String[]{MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONTENT_SUGGESTIONS, MANAGE_DEVICE_POLICY_SCREEN_CONTENT);
+                UserManager.DISALLOW_FACTORY_RESET, new String[]{MANAGE_DEVICE_POLICY_FACTORY_RESET});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONTENT_CAPTURE, MANAGE_DEVICE_POLICY_SCREEN_CONTENT);
+                UserManager.DISALLOW_FUN, new String[]{MANAGE_DEVICE_POLICY_FUN});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_WIFI, MANAGE_DEVICE_POLICY_WIFI);
+                UserManager.DISALLOW_INSTALL_APPS, new String[]{MANAGE_DEVICE_POLICY_APPS_CONTROL});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_VPN, MANAGE_DEVICE_POLICY_VPN);
+                UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES, new String[]{MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_TETHERING, MANAGE_DEVICE_POLICY_MOBILE_NETWORK);
+                UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY, new String[]{MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT, MANAGE_DEVICE_POLICY_DISPLAY);
+                UserManager.DISALLOW_MICROPHONE_TOGGLE, new String[]{MANAGE_DEVICE_POLICY_MICROPHONE_TOGGLE});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_PRIVATE_DNS, MANAGE_DEVICE_POLICY_RESTRICT_PRIVATE_DNS);
+                UserManager.DISALLOW_MODIFY_ACCOUNTS, new String[]{MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, MANAGE_DEVICE_POLICY_MOBILE_NETWORK);
+                UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA, new String[]{MANAGE_DEVICE_POLICY_PHYSICAL_MEDIA});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_LOCATION, MANAGE_DEVICE_POLICY_LOCATION);
+                UserManager.DISALLOW_NETWORK_RESET, new String[]{MANAGE_DEVICE_POLICY_MOBILE_NETWORK});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_LOCALE, MANAGE_DEVICE_POLICY_LOCALE);
+                UserManager.DISALLOW_OUTGOING_BEAM, new String[]{MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_DATE_TIME, MANAGE_DEVICE_POLICY_TIME);
+                UserManager.DISALLOW_OUTGOING_CALLS, new String[]{MANAGE_DEVICE_POLICY_CALLS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_CREDENTIALS, MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS);
+                UserManager.DISALLOW_PRINTING, new String[]{MANAGE_DEVICE_POLICY_PRINTING});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_CELL_BROADCASTS, MANAGE_DEVICE_POLICY_MOBILE_NETWORK);
+                UserManager.DISALLOW_REMOVE_USER, new String[]{MANAGE_DEVICE_POLICY_USERS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_BRIGHTNESS, MANAGE_DEVICE_POLICY_DISPLAY);
+                UserManager.DISALLOW_RUN_IN_BACKGROUND, new String[]{MANAGE_DEVICE_POLICY_RUN_IN_BACKGROUND});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_BLUETOOTH, MANAGE_DEVICE_POLICY_BLUETOOTH);
+                UserManager.DISALLOW_SAFE_BOOT, new String[]{MANAGE_DEVICE_POLICY_SAFE_BOOT});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CHANGE_WIFI_STATE, MANAGE_DEVICE_POLICY_WIFI);
+                UserManager.DISALLOW_SET_USER_ICON, new String[]{MANAGE_DEVICE_POLICY_USERS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CAMERA_TOGGLE, MANAGE_DEVICE_POLICY_CAMERA);
+                UserManager.DISALLOW_SET_WALLPAPER, new String[]{MANAGE_DEVICE_POLICY_WALLPAPER});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CAMERA, MANAGE_DEVICE_POLICY_CAMERA);
+                UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, new String[]{MANAGE_DEVICE_POLICY_PROFILE_INTERACTION});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_BLUETOOTH_SHARING, MANAGE_DEVICE_POLICY_BLUETOOTH);
+                UserManager.DISALLOW_SHARE_LOCATION, new String[]{MANAGE_DEVICE_POLICY_LOCATION});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_BLUETOOTH, MANAGE_DEVICE_POLICY_BLUETOOTH);
+                UserManager.DISALLOW_SHARING_ADMIN_CONFIGURED_WIFI, new String[]{MANAGE_DEVICE_POLICY_WIFI});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_BIOMETRIC, MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS);
+                UserManager.DISALLOW_SMS, new String[]{MANAGE_DEVICE_POLICY_SMS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_AUTOFILL, MANAGE_DEVICE_POLICY_AUTOFILL);
+                UserManager.DISALLOW_SYSTEM_ERROR_DIALOGS, new String[]{MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_APPS_CONTROL, MANAGE_DEVICE_POLICY_APPS_CONTROL);
+                UserManager.DISALLOW_ULTRA_WIDEBAND_RADIO, new String[]{MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_AMBIENT_DISPLAY, MANAGE_DEVICE_POLICY_DISPLAY);
+                UserManager.DISALLOW_UNIFIED_PASSWORD, new String[]{MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_AIRPLANE_MODE, MANAGE_DEVICE_POLICY_AIRPLANE_MODE);
+                UserManager.DISALLOW_UNINSTALL_APPS, new String[]{MANAGE_DEVICE_POLICY_APPS_CONTROL});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_ADJUST_VOLUME, MANAGE_DEVICE_POLICY_AUDIO_OUTPUT);
+                UserManager.DISALLOW_UNMUTE_DEVICE, new String[]{MANAGE_DEVICE_POLICY_AUDIO_OUTPUT});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_ADD_WIFI_CONFIG, MANAGE_DEVICE_POLICY_WIFI);
+                UserManager.DISALLOW_UNMUTE_MICROPHONE, new String[]{MANAGE_DEVICE_POLICY_MICROPHONE});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_ADD_USER, MANAGE_DEVICE_POLICY_USERS);
+                UserManager.DISALLOW_USB_FILE_TRANSFER, new String[]{MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_ADD_CLONE_PROFILE, MANAGE_DEVICE_POLICY_PROFILES);
+                UserManager.DISALLOW_USER_SWITCH, new String[]{MANAGE_DEVICE_POLICY_USERS});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.ALLOW_PARENT_PROFILE_APP_LINKING, MANAGE_DEVICE_POLICY_PROFILES);
+                UserManager.DISALLOW_WIFI_DIRECT, new String[]{MANAGE_DEVICE_POLICY_WIFI});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CELLULAR_2G, MANAGE_DEVICE_POLICY_MOBILE_NETWORK);
+                UserManager.DISALLOW_WIFI_TETHERING, new String[]{MANAGE_DEVICE_POLICY_WIFI});
         USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_ULTRA_WIDEBAND_RADIO,
-                MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION);
+                UserManager.ENSURE_VERIFY_APPS, new String[]{MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES});
 
         // Restrictions not allowed to be set by admins.
         USER_RESTRICTION_PERMISSIONS.put(
                 UserManager.DISALLOW_RECORD_AUDIO, null);
         USER_RESTRICTION_PERMISSIONS.put(
                 UserManager.DISALLOW_WALLPAPER, null);
-        USER_RESTRICTION_PERMISSIONS.put(
-                UserManager.DISALLOW_CONFIG_DEFAULT_APPS, null);
     }
 
     private EnforcingAdmin enforcePermissionForUserRestriction(ComponentName who,
             String userRestriction, String callerPackageName, int userId) {
-        String permission = USER_RESTRICTION_PERMISSIONS.get(userRestriction);
-        if (permission != null) {
-            return enforcePermissionAndGetEnforcingAdmin(who, permission, callerPackageName,
-                    userId);
-        }
+        String[] permissions = USER_RESTRICTION_PERMISSIONS.get(userRestriction);
+        if (permissions.length > 0) {
+            try {
+                return enforcePermissionsAndGetEnforcingAdmin(who, permissions, callerPackageName,
+                        userId);
+            } catch (SecurityException e) {
+                throw new SecurityException("Caller does not hold the required permission for this "
+                        + "user restriction: " + userRestriction + ".\n" + e.getMessage());
+            }
+         }
         throw new SecurityException("Admins are not permitted to set User Restriction: "
                 + userRestriction);
     }
@@ -13683,8 +13809,6 @@
                         admin,
                         new BooleanPolicyValue(hidden),
                         userId);
-                Boolean resolvedPolicy = mDevicePolicyEngine.getResolvedPolicy(
-                        PolicyDefinition.APPLICATION_HIDDEN(packageName), userId);
                 result = mInjector.binderWithCleanCallingIdentity(() -> {
                     try {
                         // This is a best effort to continue returning the same value that was
@@ -13924,16 +14048,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
@@ -13950,13 +14086,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());
         }
     }
 
@@ -13974,41 +14110,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
@@ -14017,9 +14176,12 @@
         final CallerIdentity caller = getCallerIdentity(who, callerPackage);
 
         if (isPolicyEngineForFinanceFlagEnabled()) {
-            EnforcingAdmin enforcingAdmin = enforcePermissionAndGetEnforcingAdmin(
+            EnforcingAdmin enforcingAdmin = enforcePermissionsAndGetEnforcingAdmin(
                     who,
-                    MANAGE_DEVICE_POLICY_APPS_CONTROL,
+                    new String[]{
+                            MANAGE_DEVICE_POLICY_APPS_CONTROL,
+                            MANAGE_DEVICE_POLICY_BLOCK_UNINSTALL
+                    },
                     caller.getPackageName(),
                     caller.getUserId());
             mDevicePolicyEngine.setLocalPolicy(
@@ -14580,7 +14742,7 @@
         if (isPolicyEngineForFinanceFlagEnabled()) {
             EnforcingAdmin enforcingAdmin;
             synchronized (getLockObject()) {
-                enforcingAdmin = enforceCanCallLockTaskLocked(who, callerPackageName);
+                enforcingAdmin = enforceCanCallLockTaskLocked(who, caller.getPackageName());
             }
             if (packages.length == 0) {
                 mDevicePolicyEngine.removeLocalPolicy(
@@ -14668,7 +14830,7 @@
         }
 
         final int userId = mInjector.userHandleGetCallingUserId();
-        if (isPermissionCheckFlagEnabled()) {
+        if (isPolicyEngineForFinanceFlagEnabled()) {
             LockTaskPolicy policy = mDevicePolicyEngine.getResolvedPolicy(
                     PolicyDefinition.LOCK_TASK, userId);
             if (policy == null) {
@@ -14707,8 +14869,7 @@
         if (isPolicyEngineForFinanceFlagEnabled()) {
             EnforcingAdmin enforcingAdmin;
             synchronized (getLockObject()) {
-                enforcingAdmin = enforceCanCallLockTaskLocked(who,
-                        callerPackageName);
+                enforcingAdmin = enforceCanCallLockTaskLocked(who, caller.getPackageName());
                 enforceCanSetLockTaskFeaturesOnFinancedDevice(caller, flags);
             }
             LockTaskPolicy currentPolicy = mDevicePolicyEngine.getLocalPolicySetByAdmin(
@@ -14785,6 +14946,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");
@@ -15308,11 +15470,13 @@
 
         int userId = caller.getUserId();
         synchronized (getLockObject()) {
-            Preconditions.checkCallAuthorization(isUserAffiliatedWithDeviceLocked(userId),
-                    "Admin " + who
-                            + " is neither the device owner or affiliated user's profile owner.");
-            if (isManagedProfile(userId)) {
-                throw new SecurityException("Managed profile cannot disable status bar");
+            if (!isPermissionCheckFlagEnabled()) {
+                Preconditions.checkCallAuthorization(isUserAffiliatedWithDeviceLocked(userId),
+                        "Admin " + who + " is neither the device owner or affiliated "
+                                + "user's profile owner.");
+                if (isManagedProfile(userId)) {
+                    throw new SecurityException("Managed profile cannot disable status bar");
+                }
             }
             checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_SET_STATUS_BAR_DISABLED);
 
@@ -15365,16 +15529,23 @@
     @Override
     public boolean isStatusBarDisabled(String callerPackage) {
         final CallerIdentity caller = getCallerIdentity(callerPackage);
-        Preconditions.checkCallAuthorization(
-                isProfileOwner(caller) || isDefaultDeviceOwner(caller));
+        if (isPermissionCheckFlagEnabled()) {
+            enforceCanQuery(
+                    MANAGE_DEVICE_POLICY_STATUS_BAR, caller.getPackageName(), caller.getUserId());
+        } else {
+            Preconditions.checkCallAuthorization(
+                    isProfileOwner(caller) || isDefaultDeviceOwner(caller));
+        }
 
         int userId = caller.getUserId();
         synchronized (getLockObject()) {
-            Preconditions.checkCallAuthorization(isUserAffiliatedWithDeviceLocked(userId),
-                    "Admin " + callerPackage
-                            + " is neither the device owner or affiliated user's profile owner.");
-            if (isManagedProfile(userId)) {
-                throw new SecurityException("Managed profile cannot disable status bar");
+            if (!isPermissionCheckFlagEnabled()) {
+                Preconditions.checkCallAuthorization(isUserAffiliatedWithDeviceLocked(userId),
+                        "Admin " + callerPackage
+                                + " is neither the device owner or affiliated user's profile owner.");
+                if (isManagedProfile(userId)) {
+                    throw new SecurityException("Managed profile cannot disable status bar");
+                }
             }
             DevicePolicyData policy = getUserData(userId);
             return policy.mStatusBarDisabled;
@@ -16055,6 +16226,7 @@
         } else {
             long ident = mInjector.binderClearCallingIdentity();
             try {
+                // TODO(b/277908283): check in the policy engine instead of calling user manager.
                 List<UserManager.EnforcingUser> sources = mUserManager
                         .getUserRestrictionSources(restriction, UserHandle.of(userId));
                 if (sources == null) {
@@ -16086,27 +16258,14 @@
                 }
                 final UserManager.EnforcingUser enforcingUser = sources.get(0);
                 final int sourceType = enforcingUser.getUserRestrictionSource();
-                final int enforcingUserId = enforcingUser.getUserHandle().getIdentifier();
-                if (sourceType == UserManager.RESTRICTION_SOURCE_PROFILE_OWNER) {
-                    // Restriction was enforced by PO
-                    final ComponentName profileOwner = mOwners.getProfileOwnerComponent(
-                            enforcingUserId);
-                    if (profileOwner != null) {
+                if (sourceType == UserManager.RESTRICTION_SOURCE_PROFILE_OWNER
+                        || sourceType == UserManager.RESTRICTION_SOURCE_DEVICE_OWNER) {
+                    ActiveAdmin admin = getMostProbableDPCAdminForLocalPolicy(userId);
+                    if (admin != null) {
                         result = new Bundle();
-                        result.putInt(Intent.EXTRA_USER_ID, enforcingUserId);
+                        result.putInt(Intent.EXTRA_USER_ID, admin.getUserHandle().getIdentifier());
                         result.putParcelable(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
-                                profileOwner);
-                        return result;
-                    }
-                } else if (sourceType == UserManager.RESTRICTION_SOURCE_DEVICE_OWNER) {
-                    // Restriction was enforced by DO
-                    final Pair<Integer, ComponentName> deviceOwner =
-                            mOwners.getDeviceOwnerUserIdAndComponent();
-                    if (deviceOwner != null) {
-                        result = new Bundle();
-                        result.putInt(Intent.EXTRA_USER_ID, deviceOwner.first);
-                        result.putParcelable(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
-                                deviceOwner.second);
+                                admin.info.getComponent());
                         return result;
                     }
                 } else if (sourceType == UserManager.RESTRICTION_SOURCE_SYSTEM) {
@@ -16402,11 +16561,13 @@
                 hasCallingOrSelfPermission(permission.NOTIFY_PENDING_SYSTEM_UPDATE),
                 "Only the system update service can broadcast update information");
 
-        if (UserHandle.getCallingUserId() != UserHandle.USER_SYSTEM) {
-            Slogf.w(LOG_TAG, "Only the system update service in the system user can broadcast "
-                    + "update information.");
-            return;
-        }
+        mInjector.binderWithCleanCallingIdentity(() -> {
+            if (!mUserManager.getUserInfo(UserHandle.getCallingUserId()).isMain()) {
+                Slogf.w(LOG_TAG, "Only the system update service in the main user can broadcast "
+                        + "update information.");
+                return;
+            }
+        });
 
         if (!mOwners.saveSystemUpdateInfo(info)) {
             // Pending system update hasn't changed, don't send duplicate notification.
@@ -16514,8 +16675,9 @@
                 enforcePermissionGrantStateOnFinancedDevice(packageName, permission);
             }
         }
+        EnforcingAdmin enforcingAdmin;
         if (isPermissionCheckFlagEnabled()) {
-            EnforcingAdmin enforcingAdmin = enforcePermissionAndGetEnforcingAdmin(
+            enforcingAdmin = enforcePermissionAndGetEnforcingAdmin(
                     admin,
                     MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS,
                     callerPackage,
@@ -16539,17 +16701,6 @@
                 callback.sendResult(null);
                 return;
             }
-            // TODO(b/266924257): decide how to handle the internal state if the package doesn't
-            //  exist, or the permission isn't requested by the app, because we could end up with
-            //  inconsistent state between the policy engine and package manager. Also a package
-            //  might get removed or has it's permission updated after we've set the policy.
-            mDevicePolicyEngine.setLocalPolicy(
-                    PolicyDefinition.PERMISSION_GRANT(packageName, permission),
-                    enforcingAdmin,
-                    new IntegerPolicyValue(grantState),
-                    caller.getUserId());
-            // TODO: update javadoc to reflect that callback no longer return success/failure
-            callback.sendResult(Bundle.EMPTY);
         } else {
             Preconditions.checkCallAuthorization((caller.hasAdminComponent()
                     && (isProfileOwner(caller) || isDefaultDeviceOwner(caller)
@@ -16557,51 +16708,81 @@
                     || (caller.hasPackage() && isCallerDelegate(caller,
                     DELEGATION_PERMISSION_GRANT)));
             synchronized (getLockObject()) {
-            long ident = mInjector.binderClearCallingIdentity();
-            try {
-                boolean isPostQAdmin = getTargetSdk(caller.getPackageName(), caller.getUserId())
-                        >= android.os.Build.VERSION_CODES.Q;
-                if (!isPostQAdmin) {
-                    // Legacy admins assume that they cannot control pre-M apps
-                    if (getTargetSdk(packageName, caller.getUserId())
-                            < android.os.Build.VERSION_CODES.M) {
+                long ident = mInjector.binderClearCallingIdentity();
+                try {
+                    boolean isPostQAdmin = getTargetSdk(caller.getPackageName(), caller.getUserId())
+                            >= android.os.Build.VERSION_CODES.Q;
+                    if (!isPostQAdmin) {
+                        // Legacy admins assume that they cannot control pre-M apps
+                        if (getTargetSdk(packageName, caller.getUserId())
+                                < android.os.Build.VERSION_CODES.M) {
+                            callback.sendResult(null);
+                            return;
+                        }
+                    }
+                    if (!isRuntimePermission(permission)) {
                         callback.sendResult(null);
                         return;
                     }
-                }
-                if (!isRuntimePermission(permission)) {
+                } catch (SecurityException e) {
+                    Slogf.e(LOG_TAG, "Could not set permission grant state", e);
                     callback.sendResult(null);
-                    return;
+                } finally {
+                    mInjector.binderRestoreCallingIdentity(ident);
                 }
-                if (grantState == PERMISSION_GRANT_STATE_GRANTED
-                        || grantState == DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED
-                        || grantState == DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT) {
-                    AdminPermissionControlParams permissionParams =
-                            new AdminPermissionControlParams(packageName, permission,
-                                    grantState,
-                                    canAdminGrantSensorsPermissions());
-                    mInjector.getPermissionControllerManager(caller.getUserHandle())
-                            .setRuntimePermissionGrantStateByDeviceAdmin(
-                                    caller.getPackageName(),
-                                    permissionParams, mContext.getMainExecutor(),
-                                    (permissionWasSet) -> {
-                                        if (isPostQAdmin && !permissionWasSet) {
-                                            callback.sendResult(null);
-                                            return;
-                                        }
-
-                                        DevicePolicyEventLogger
-                                                .createEvent(DevicePolicyEnums
-                                                        .SET_PERMISSION_GRANT_STATE)
-                                                .setAdmin(caller.getPackageName())
-                                                .setStrings(permission)
-                                                .setInt(grantState)
-                                                .setBoolean(
-                                                        /* isDelegate */ isCallerDelegate(caller))
-                                                .write();
-
-                                        callback.sendResult(Bundle.EMPTY);
-                                    });
+            }
+        }
+        // TODO(b/278710449): enable when we stop policy enforecer callback from blocking the main
+        //  thread
+        if (false) {
+            // TODO(b/266924257): decide how to handle the internal state if the package doesn't
+            //  exist, or the permission isn't requested by the app, because we could end up with
+            //  inconsistent state between the policy engine and package manager. Also a package
+            //  might get removed or has it's permission updated after we've set the policy.
+            if (grantState == PERMISSION_GRANT_STATE_DEFAULT) {
+                mDevicePolicyEngine.removeLocalPolicy(
+                        PolicyDefinition.PERMISSION_GRANT(packageName, permission),
+                        enforcingAdmin,
+                        caller.getUserId());
+            } else {
+                mDevicePolicyEngine.setLocalPolicy(
+                        PolicyDefinition.PERMISSION_GRANT(packageName, permission),
+                        enforcingAdmin,
+                        new IntegerPolicyValue(grantState),
+                        caller.getUserId());
+            }
+            int newState = mInjector.binderWithCleanCallingIdentity(() ->
+                    getPermissionGrantStateForUser(
+                            packageName, permission, caller, caller.getUserId()));
+            if (newState == grantState) {
+                callback.sendResult(Bundle.EMPTY);
+            } else {
+                callback.sendResult(null);
+            }
+        } else {
+            synchronized (getLockObject()) {
+                long ident = mInjector.binderClearCallingIdentity();
+                try {
+                    boolean isPostQAdmin = getTargetSdk(caller.getPackageName(), caller.getUserId())
+                            >= android.os.Build.VERSION_CODES.Q;
+                    if (grantState == PERMISSION_GRANT_STATE_GRANTED
+                            || grantState == DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED
+                            || grantState == DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT) {
+                        AdminPermissionControlParams permissionParams =
+                                new AdminPermissionControlParams(packageName, permission,
+                                        grantState,
+                                        canAdminGrantSensorsPermissions());
+                        mInjector.getPermissionControllerManager(caller.getUserHandle())
+                                .setRuntimePermissionGrantStateByDeviceAdmin(
+                                        caller.getPackageName(),
+                                        permissionParams, mContext.getMainExecutor(),
+                                        (permissionWasSet) -> {
+                                            if (isPostQAdmin && !permissionWasSet) {
+                                                callback.sendResult(null);
+                                                return;
+                                            }
+                                            callback.sendResult(Bundle.EMPTY);
+                                        });
                     }
                 } catch (SecurityException e) {
                     Slogf.e(LOG_TAG, "Could not set permission grant state", e);
@@ -16612,6 +16793,12 @@
                 }
             }
         }
+        DevicePolicyEventLogger.createEvent(DevicePolicyEnums.SET_PERMISSION_GRANT_STATE)
+                .setAdmin(caller.getPackageName())
+                .setStrings(permission)
+                .setInt(grantState)
+                .setBoolean(/* isDelegate */ isCallerDelegate(caller))
+                .write();
     }
 
     private static final List<String> SENSOR_PERMISSIONS = new ArrayList<>();
@@ -16626,10 +16813,6 @@
         SENSOR_PERMISSIONS.add(Manifest.permission.BACKGROUND_CAMERA);
         SENSOR_PERMISSIONS.add(Manifest.permission.RECORD_BACKGROUND_AUDIO);
         SENSOR_PERMISSIONS.add(Manifest.permission.BODY_SENSORS_BACKGROUND);
-        SENSOR_PERMISSIONS.add(
-                Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE);
-        SENSOR_PERMISSIONS.add(
-                    Manifest.permission.BODY_SENSORS_WRIST_TEMPERATURE_BACKGROUND);
     }
 
     private boolean canGrantPermission(CallerIdentity caller, String permission,
@@ -16679,10 +16862,8 @@
             if (isFinancedDeviceOwner(caller)) {
                 enforcePermissionGrantStateOnFinancedDevice(packageName, permission);
             }
-            return mInjector.binderWithCleanCallingIdentity(() -> {
-                return getPermissionGrantStateForUser(
-                        packageName, permission, caller, caller.getUserId());
-            });
+            return mInjector.binderWithCleanCallingIdentity(() -> getPermissionGrantStateForUser(
+                    packageName, permission, caller, caller.getUserId()));
         }
     }
 
@@ -17324,6 +17505,7 @@
                     caller.getUserId());
             admin = enforcingAdmin.getActiveAdmin();
         } else {
+            Objects.requireNonNull(who, "ComponentName is null");
             Preconditions.checkCallAuthorization(isDeviceOwner(caller) || isProfileOwner(caller));
         }
 
@@ -17355,6 +17537,7 @@
                     caller.getUserId());
             admin = enforcingAdmin.getActiveAdmin();
         } else {
+            Objects.requireNonNull(who, "ComponentName is null");
             Preconditions.checkCallingUser(isManagedProfile(caller.getUserId()));
             Preconditions.checkCallAuthorization(isDeviceOwner(caller) || isProfileOwner(caller));
 
@@ -18262,6 +18445,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}.
@@ -18299,7 +18502,7 @@
                 }
             }
 
-            boolean compatible = !hasIncompatibleAccounts(am, accounts);
+            boolean compatible = !hasIncompatibleAccounts(userId);
             if (compatible) {
                 Slogf.w(LOG_TAG, "All accounts are compatible");
             } else {
@@ -18309,37 +18512,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);
@@ -18757,7 +18990,7 @@
                     admin,
                     MANAGE_DEVICE_POLICY_RESET_PASSWORD,
                     caller.getPackageName(),
-                    UserHandle.USER_ALL);
+                    userId);
             Long currentTokenHandle = mDevicePolicyEngine.getLocalPolicySetByAdmin(
                     PolicyDefinition.RESET_PASSWORD_TOKEN,
                     enforcingAdmin,
@@ -18821,7 +19054,7 @@
                     admin,
                     MANAGE_DEVICE_POLICY_RESET_PASSWORD,
                     caller.getPackageName(),
-                    UserHandle.USER_ALL);
+                    userId);
             Long currentTokenHandle = mDevicePolicyEngine.getLocalPolicySetByAdmin(
                     PolicyDefinition.RESET_PASSWORD_TOKEN,
                     enforcingAdmin,
@@ -18867,7 +19100,7 @@
                     admin,
                     MANAGE_DEVICE_POLICY_RESET_PASSWORD,
                     caller.getPackageName(),
-                    UserHandle.USER_ALL);
+                    userId);
             Long currentTokenHandle = mDevicePolicyEngine.getLocalPolicySetByAdmin(
                     PolicyDefinition.RESET_PASSWORD_TOKEN,
                     enforcingAdmin,
@@ -18919,7 +19152,7 @@
                     admin,
                     MANAGE_DEVICE_POLICY_RESET_PASSWORD,
                     caller.getPackageName(),
-                    UserHandle.USER_ALL);
+                    userId);
             Long currentTokenHandle = mDevicePolicyEngine.getLocalPolicySetByAdmin(
                     PolicyDefinition.RESET_PASSWORD_TOKEN,
                     enforcingAdmin,
@@ -18945,10 +19178,17 @@
         }
 
         if (result) {
-            DevicePolicyEventLogger
-                    .createEvent(DevicePolicyEnums.RESET_PASSWORD_WITH_TOKEN)
-                    .setAdmin(caller.getComponentName())
-                    .write();
+            if (isPermissionCheckFlagEnabled()) {
+                DevicePolicyEventLogger
+                        .createEvent(DevicePolicyEnums.RESET_PASSWORD_WITH_TOKEN)
+                        .setAdmin(callerPackageName)
+                        .write();
+            } else {
+                DevicePolicyEventLogger
+                        .createEvent(DevicePolicyEnums.RESET_PASSWORD_WITH_TOKEN)
+                        .setAdmin(caller.getComponentName())
+                        .write();
+            }
         }
         return result;
     }
@@ -22171,26 +22411,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;
@@ -22422,12 +22642,35 @@
         });
     }
 
+    // Permission that will need to be created in V.
+    private static final String MANAGE_DEVICE_POLICY_BLOCK_UNINSTALL =
+            "manage_device_policy_block_uninstall";
+    private static final String MANAGE_DEVICE_POLICY_CAMERA_TOGGLE =
+            "manage_device_policy_camera_toggle";
+    private static final String MANAGE_DEVICE_POLICY_MICROPHONE_TOGGLE =
+            "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(
@@ -22512,54 +22755,54 @@
     );
 
     /**
-     * All the permisisons granted to a profile owner.
+     * All the permissions granted to a profile owner.
      */
     private static final List<String> PROFILE_OWNER_PERMISSIONS  =
             List.of(
-                MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT,
-                MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL,
-                MANAGE_DEVICE_POLICY_APPS_CONTROL,
-                MANAGE_DEVICE_POLICY_APP_RESTRICTIONS,
-                MANAGE_DEVICE_POLICY_AUDIO_OUTPUT,
-                MANAGE_DEVICE_POLICY_AUTOFILL,
-                MANAGE_DEVICE_POLICY_CALLS,
-                MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES,
-                MANAGE_DEVICE_POLICY_DISPLAY,
-                MANAGE_DEVICE_POLICY_FACTORY_RESET,
-                MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES,
-                MANAGE_DEVICE_POLICY_KEYGUARD,
-                MANAGE_DEVICE_POLICY_LOCALE,
-                MANAGE_DEVICE_POLICY_LOCATION,
-                MANAGE_DEVICE_POLICY_LOCK,
-                MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS,
-                MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION,
-                MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY,
-                MANAGE_DEVICE_POLICY_PACKAGE_STATE,
-                MANAGE_DEVICE_POLICY_PRINTING,
-                MANAGE_DEVICE_POLICY_PROFILES,
-                MANAGE_DEVICE_POLICY_PROFILE_INTERACTION,
-                MANAGE_DEVICE_POLICY_RESET_PASSWORD,
-                MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS,
-                MANAGE_DEVICE_POLICY_SCREEN_CAPTURE,
-                MANAGE_DEVICE_POLICY_SCREEN_CONTENT,
-                MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE,
-                MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS,
-                MANAGE_DEVICE_POLICY_TIME,
-                MANAGE_DEVICE_POLICY_VPN,
-                MANAGE_DEVICE_POLICY_WIPE_DATA
+                    MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT,
+                    MANAGE_DEVICE_POLICY_ACROSS_USERS_SECURITY_CRITICAL,
+                    MANAGE_DEVICE_POLICY_APPS_CONTROL,
+                    MANAGE_DEVICE_POLICY_APP_RESTRICTIONS,
+                    MANAGE_DEVICE_POLICY_AUDIO_OUTPUT,
+                    MANAGE_DEVICE_POLICY_AUTOFILL,
+                    MANAGE_DEVICE_POLICY_BLUETOOTH,
+                    MANAGE_DEVICE_POLICY_CALLS,
+                    MANAGE_DEVICE_POLICY_CAMERA,
+                    MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES,
+                    MANAGE_DEVICE_POLICY_DISPLAY,
+                    MANAGE_DEVICE_POLICY_FACTORY_RESET,
+                    MANAGE_DEVICE_POLICY_INSTALL_UNKNOWN_SOURCES,
+                    MANAGE_DEVICE_POLICY_KEYGUARD,
+                    MANAGE_DEVICE_POLICY_LOCALE,
+                    MANAGE_DEVICE_POLICY_LOCATION,
+                    MANAGE_DEVICE_POLICY_LOCK,
+                    MANAGE_DEVICE_POLICY_LOCK_CREDENTIALS,
+                    MANAGE_DEVICE_POLICY_NEARBY_COMMUNICATION,
+                    MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY,
+                    MANAGE_DEVICE_POLICY_PACKAGE_STATE,
+                    MANAGE_DEVICE_POLICY_PRINTING,
+                    MANAGE_DEVICE_POLICY_PROFILES,
+                    MANAGE_DEVICE_POLICY_PROFILE_INTERACTION,
+                    MANAGE_DEVICE_POLICY_RESET_PASSWORD,
+                    MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS,
+                    MANAGE_DEVICE_POLICY_SCREEN_CAPTURE,
+                    MANAGE_DEVICE_POLICY_SCREEN_CONTENT,
+                    MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE,
+                    MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS,
+                    MANAGE_DEVICE_POLICY_TIME,
+                    MANAGE_DEVICE_POLICY_VPN,
+                    MANAGE_DEVICE_POLICY_WIPE_DATA
             );
 
     /**
-    * All the additional permissions granted to an organisation owned profile owner.
-    */
+     * All the additional permissions granted to an organisation owned profile owner.
+     */
     private static final List<String>
             ADDITIONAL_PROFILE_OWNER_OF_ORGANIZATION_OWNED_DEVICE_PERMISSIONS =
-                List.of(
+            List.of(
                     MANAGE_DEVICE_POLICY_ACROSS_USERS,
                     MANAGE_DEVICE_POLICY_AIRPLANE_MODE,
                     MANAGE_DEVICE_POLICY_APPS_CONTROL,
-                    MANAGE_DEVICE_POLICY_BLUETOOTH,
-                    MANAGE_DEVICE_POLICY_CAMERA,
                     MANAGE_DEVICE_POLICY_CERTIFICATES,
                     MANAGE_DEVICE_POLICY_COMMON_CRITERIA_MODE,
                     MANAGE_DEVICE_POLICY_DEFAULT_SMS,
@@ -22579,14 +22822,14 @@
                     MANAGE_DEVICE_POLICY_WIFI,
                     SET_TIME,
                     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,
-                    MANAGE_DEVICE_POLICY_BLUETOOTH,
-                    MANAGE_DEVICE_POLICY_CAMERA,
                     MANAGE_DEVICE_POLICY_DISPLAY,
                     MANAGE_DEVICE_POLICY_FUN,
                     MANAGE_DEVICE_POLICY_LOCK_TASK,
@@ -22597,7 +22840,6 @@
                     MANAGE_DEVICE_POLICY_PROFILE_INTERACTION,
                     MANAGE_DEVICE_POLICY_SAFE_BOOT,
                     MANAGE_DEVICE_POLICY_SMS,
-                    MANAGE_DEVICE_POLICY_STATUS_BAR,
                     MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS,
                     MANAGE_DEVICE_POLICY_USB_FILE_TRANSFER,
                     MANAGE_DEVICE_POLICY_USERS,
@@ -22607,6 +22849,22 @@
             );
 
     /**
+     * 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(
+                    MANAGE_DEVICE_POLICY_STATUS_BAR
+            );
+
+    /**
      * Combination of {@link PROFILE_OWNER_PERMISSIONS} and
      * {@link ADDITIONAL_PROFILE_OWNER_OF_ORGANIZATION_OWNED_DEVICE_PERMISSIONS}.
      */
@@ -22620,6 +22878,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<>();
     {
@@ -22632,6 +22904,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);
@@ -22639,13 +22921,16 @@
                 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<>();
     {
         DELEGATE_SCOPES.put(MANAGE_DEVICE_POLICY_RUNTIME_PERMISSIONS, DELEGATION_PERMISSION_GRANT);
         DELEGATE_SCOPES.put(MANAGE_DEVICE_POLICY_APP_RESTRICTIONS, DELEGATION_APP_RESTRICTIONS);
-        DELEGATE_SCOPES.put(MANAGE_DEVICE_POLICY_APPS_CONTROL, DELEGATION_BLOCK_UNINSTALL);
+        DELEGATE_SCOPES.put(MANAGE_DEVICE_POLICY_BLOCK_UNINSTALL, DELEGATION_BLOCK_UNINSTALL);
         DELEGATE_SCOPES.put(MANAGE_DEVICE_POLICY_SECURITY_LOGGING, DELEGATION_SECURITY_LOGGING);
         DELEGATE_SCOPES.put(MANAGE_DEVICE_POLICY_PACKAGE_STATE, DELEGATION_PACKAGE_ACCESS);
     }
@@ -22724,6 +23009,10 @@
                 MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL);
         CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_AUTOFILL,
                 MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL);
+        CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_BLOCK_UNINSTALL,
+                MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL);
+        CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_CAMERA_TOGGLE,
+                MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL);
         CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_COMMON_CRITERIA_MODE,
                 MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL);
         CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_DEBUGGING_FEATURES,
@@ -22740,6 +23029,8 @@
                 MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL);
         CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_LOCK_TASK,
                 MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL);
+        CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_MICROPHONE_TOGGLE,
+                MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL);
         CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_ORGANIZATION_IDENTITY,
                 MANAGE_DEVICE_POLICY_ACROSS_USERS_FULL);
         CROSS_USER_PERMISSIONS.put(MANAGE_DEVICE_POLICY_PROFILES,
@@ -22770,13 +23061,34 @@
 
     /**
      * Checks if the calling process has been granted permission to apply a device policy on a
+     * specific user. Only one permission provided in the list needs to be granted to pass this
+     * check.
+     * The given permissions will be checked along with their associated cross-user permissions if
+     * they exists and the target user is different to the calling user.
+     * Returns an {@link EnforcingAdmin} for the caller.
+     *
+     * @param admin the component name of the admin.
+     * @param callerPackageName The package name of the calling application.
+     * @param permissions an array of permission names to be checked.
+     * @param targetUserId The userId of the user which the caller needs permission to act on.
+     * @throws SecurityException if the caller has not been granted the given permission,
+     * the associated cross-user permission if the caller's user is different to the target user.
+     */
+    private EnforcingAdmin enforcePermissionsAndGetEnforcingAdmin(@Nullable ComponentName admin,
+            String[] permissions, String callerPackageName, int targetUserId) {
+        enforcePermissions(permissions, callerPackageName, targetUserId);
+        return getEnforcingAdminForCaller(admin, callerPackageName);
+    }
+
+    /**
+     * Checks if the calling process has been granted permission to apply a device policy on a
      * specific user.
      * The given permission will be checked along with its associated cross-user permission if it
      * exists and the target user is different to the calling user.
      * Returns an {@link EnforcingAdmin} for the caller.
      *
      * @param admin the component name of the admin.
-     * @param callerPackageName The package name  of the calling application.
+     * @param callerPackageName The package name of the calling application.
      * @param permission The name of the permission being checked.
      * @param targetUserId The userId of the user which the caller needs permission to act on.
      * @throws SecurityException if the caller has not been granted the given permission,
@@ -22834,32 +23146,24 @@
             new HashMap<>();
 
     /**
-     * Checks if the calling process has been granted permission to apply a device policy on a
-     * specific user.
-     * The given permission will be checked along with its associated cross-user permission if it
-     * exists and the target user is different to the calling user.
+     * Checks if the calling process has been granted permission to apply a device policy.
      *
      * @param callerPackageName The package name  of the calling application.
      * @param permission The name of the permission being checked.
-     * @param targetUserId The userId of the user which the caller needs permission to act on.
      * @throws SecurityException if the caller has not been granted the given permission,
      * the associated cross-user permission if the caller's user is different to the target user.
      */
-    private void enforcePermission(String permission, String callerPackageName, int targetUserId)
+    private void enforcePermission(String permission, String callerPackageName)
             throws SecurityException {
-        if (!hasPermission(permission, callerPackageName, targetUserId)) {
-            // TODO(b/276920002): Split the error messages so that the cross-user permission
-            // is only mentioned when it is needed.
+        if (!hasPermission(permission, callerPackageName)) {
             throw new SecurityException("Caller does not have the required permissions for "
-                    + "this user. Permissions required: {"
+                    + "this user. Permission required: "
                     + permission
-                    + ", "
-                    + CROSS_USER_PERMISSIONS.get(permission)
-                    + "(if calling cross-user)"
-                    + "}");
+                    + ".");
         }
     }
 
+
     /**
      * Checks if the calling process has been granted permission to apply a device policy on a
      * specific user.
@@ -22872,23 +23176,66 @@
      * @throws SecurityException if the caller has not been granted the given permission,
      * the associated cross-user permission if the caller's user is different to the target user.
      */
-    private void enforcePermission(String permission, int adminPolicy,
-            String callerPackageName, int targetUserId)
+    private void enforcePermission(String permission, String callerPackageName, int targetUserId)
             throws SecurityException {
-        if (!hasPermissionOrAdminPolicy(permission, callerPackageName, adminPolicy, targetUserId)) {
-            // TODO(b/276920002): Split the error messages so that the cross-user permission
-            // is only mentioned when it is needed.
-            throw new SecurityException("Caller does not have the required permissions for "
-                    + "this user. Permissions required: {"
-                    + permission
-                    + ", "
-                    + CROSS_USER_PERMISSIONS.get(permission)
-                    + "(if calling cross-user)"
-                    + "}");
+        enforcePermission(permission, callerPackageName);
+        if (targetUserId != getCallerIdentity(callerPackageName).getUserId()) {
+            enforcePermission(CROSS_USER_PERMISSIONS.get(permission), callerPackageName);
         }
     }
 
     /**
+     * Checks if the calling process has been granted permission to apply a device policy on a
+     * specific user. Only one of the given permissions will be required to be held to pass this
+     * check.
+     * The given permissions will be checked along with their associated cross-user permissions if
+     * they exist and the target user is different to the calling user.
+     *
+     * @param permissions An array of the names of the permissions being checked.
+     * @param callerPackageName The package name  of the calling application.
+     * @param targetUserId The userId of the user which the caller needs permission to act on.
+     * @throws SecurityException if the caller has not been granted the given permission,
+     * the associated cross-user permission if the caller's user is different to the target user.
+     */
+    private void enforcePermissions(String[] permissions, String callerPackageName,
+            int targetUserId) throws SecurityException {
+        String heldPermission = "";
+        for (String permission : permissions) {
+            if (hasPermission(permission, callerPackageName)) {
+                heldPermission = permission;
+                break;
+            }
+        }
+        if (heldPermission.isEmpty()) {
+            throw new SecurityException("Caller does not have the required permissions for "
+                    + "this user. One of the following permission required: "
+                    + Arrays.toString(permissions));
+        }
+        enforcePermission(heldPermission, callerPackageName, targetUserId);
+    }
+
+    /**
+     * Checks if the calling process has been granted permission to apply a device policy on a
+     * specific user.
+     * The given permission will be checked along with its associated cross-user permission if it
+     * exists and the target user is different to the calling user.
+     *
+     * @param callerPackageName The package name  of the calling application.
+     * @param adminPolicy The admin policy that should grant holders permission.
+     * @param permission The name of the permission being checked.
+     * @param targetUserId The userId of the user which the caller needs permission to act on.
+     * @throws SecurityException if the caller has not been granted the given permission,
+     * the associated cross-user permission if the caller's user is different to the target user.
+     */
+    private void enforcePermission(String permission, int adminPolicy,
+            String callerPackageName, int targetUserId) throws SecurityException {
+        if (hasAdminPolicy(adminPolicy, callerPackageName)) {
+            return;
+        }
+        enforcePermission(permission, callerPackageName, targetUserId);
+    }
+
+    /**
      * Checks whether the calling process has been granted permission to query a device policy on
      * a specific user.
      * The given permission will be checked along with its associated cross-user permission if it
@@ -22909,6 +23256,12 @@
         enforcePermission(permission, callerPackageName, targetUserId);
     }
 
+    private boolean hasAdminPolicy(int adminPolicy, String callerPackageName) {
+        CallerIdentity caller = getCallerIdentity(callerPackageName);
+        ActiveAdmin deviceAdmin = getActiveAdminForCaller(null, caller);
+        return deviceAdmin != null && deviceAdmin.info.usesPolicy(adminPolicy);
+    }
+
     /**
      * Return whether the calling process has been granted permission to apply a device policy on
      * a specific user.
@@ -22921,24 +23274,15 @@
         CallerIdentity caller = getCallerIdentity(callerPackageName);
         boolean hasPermissionOnOwnUser = hasPermission(permission, caller.getPackageName());
         boolean hasPermissionOnTargetUser = true;
-        if (hasPermissionOnOwnUser & caller.getUserId() != targetUserId) {
-            hasPermissionOnTargetUser = hasPermission(CROSS_USER_PERMISSIONS.get(permission),
-                    caller.getPackageName());
+        if (hasPermissionOnOwnUser && caller.getUserId() != targetUserId) {
+            hasPermissionOnTargetUser = hasPermissionOnTargetUser
+                    && hasPermission(CROSS_USER_PERMISSIONS.get(permission),
+                        caller.getPackageName());
         }
 
         return hasPermissionOnOwnUser && hasPermissionOnTargetUser;
     }
 
-    private boolean hasPermissionOrAdminPolicy(String permission, String callerPackageName,
-            int adminPolicy, int targetUserId) {
-        CallerIdentity caller = getCallerIdentity(callerPackageName);
-        if (hasPermission(permission, caller.getPackageName(), targetUserId)) {
-            return true;
-        }
-        ActiveAdmin deviceAdmin = getActiveAdminForCaller(null, caller);
-        return deviceAdmin != null && deviceAdmin.info.usesPolicy(adminPolicy);
-    }
-
     /**
      * Return whether the calling process has been granted the given permission.
      *
@@ -22957,22 +23301,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)) {
@@ -23042,6 +23373,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,
@@ -23237,14 +23597,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 509a66b..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,9 +282,36 @@
                         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<>();
 
+    // TODO(b/277218360): Revisit policies that should be marked as global-only.
     static {
         POLICY_DEFINITIONS.put(DevicePolicyIdentifiers.AUTO_TIMEZONE_POLICY, AUTO_TIMEZONE);
         POLICY_DEFINITIONS.put(DevicePolicyIdentifiers.PERMISSION_GRANT_POLICY,
@@ -303,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);
@@ -312,8 +342,9 @@
         USER_RESTRICTION_FLAGS.put(
                 UserManager.DISALLOW_WIFI_TETHERING, POLICY_FLAG_GLOBAL_ONLY_POLICY);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_GRANT_ADMIN, /* flags= */ 0);
+        // TODO: set as global only once we get rid of the mapping
         USER_RESTRICTION_FLAGS.put(
-                UserManager.DISALLOW_SHARING_ADMIN_CONFIGURED_WIFI, POLICY_FLAG_GLOBAL_ONLY_POLICY);
+                UserManager.DISALLOW_SHARING_ADMIN_CONFIGURED_WIFI, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(
                 UserManager.DISALLOW_WIFI_DIRECT, POLICY_FLAG_GLOBAL_ONLY_POLICY);
         USER_RESTRICTION_FLAGS.put(
@@ -333,8 +364,10 @@
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_CONFIG_BLUETOOTH, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_BLUETOOTH, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_BLUETOOTH_SHARING, /* flags= */ 0);
+        // This effectively always applies globally, but it can be set on the profile
+        // parent, check the javadocs on the restriction for more info.
         USER_RESTRICTION_FLAGS.put(
-                UserManager.DISALLOW_USB_FILE_TRANSFER, POLICY_FLAG_GLOBAL_ONLY_POLICY);
+                UserManager.DISALLOW_USB_FILE_TRANSFER, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_CONFIG_CREDENTIALS, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_REMOVE_USER, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_REMOVE_MANAGED_PROFILE, /* flags= */ 0);
@@ -344,8 +377,10 @@
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_CONFIG_DATE_TIME, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(
                 UserManager.DISALLOW_CONFIG_TETHERING, /* flags= */ 0);
+        // This effectively always applies globally, but it can be set on the profile
+        // parent, check the javadocs on the restriction for more info.
         USER_RESTRICTION_FLAGS.put(
-                UserManager.DISALLOW_NETWORK_RESET, POLICY_FLAG_GLOBAL_ONLY_POLICY);
+                UserManager.DISALLOW_NETWORK_RESET, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_FACTORY_RESET, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_ADD_USER, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_ADD_MANAGED_PROFILE, /* flags= */ 0);
@@ -376,8 +411,7 @@
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_UNMUTE_DEVICE, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_DATA_ROAMING, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_SET_USER_ICON, /* flags= */ 0);
-            // TODO: double check flags
-        USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_OEM_UNLOCK, POLICY_FLAG_GLOBAL_ONLY_POLICY);
+        USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_OEM_UNLOCK, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_UNIFIED_PASSWORD, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.ALLOW_PARENT_PROFILE_APP_LINKING, /* flags= */ 0);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_AUTOFILL, /* flags= */ 0);
@@ -390,6 +424,7 @@
         USER_RESTRICTION_FLAGS.put(
                 UserManager.DISALLOW_CONFIG_PRIVATE_DNS, POLICY_FLAG_GLOBAL_ONLY_POLICY);
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_MICROPHONE_TOGGLE, /* flags= */ 0);
+        // TODO: According the UserRestrictionsUtils, this is global only, need to confirm.
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_CAMERA_TOGGLE, /* flags= */ 0);
         // TODO: check if its global only
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_BIOMETRIC, /* flags= */ 0);
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java
index d65d366..12a8a75 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java
@@ -84,6 +84,7 @@
                     ? DevicePolicyManager.PERMISSION_GRANT_STATE_DEFAULT
                     : grantState;
 
+            // TODO(b/278710449): stop blocking in the main thread
             BlockingCallback callback = new BlockingCallback();
             // TODO: remove canAdminGrantSensorPermissions once we expose a new method in
             //  permissionController that doesn't need it.
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/TEST_MAPPING b/services/tests/PackageManagerServiceTests/TEST_MAPPING
index e98acb2..5d96af9 100644
--- a/services/tests/PackageManagerServiceTests/TEST_MAPPING
+++ b/services/tests/PackageManagerServiceTests/TEST_MAPPING
@@ -55,23 +55,10 @@
           // TODO(b/204133664)
           "exclude-filter": "com.android.server.pm.test.SdCardEjectionTests"
         },
-	{
-          // TODO(b/272575212)
-          "exclude-filter": "com.android.server.pm.test.SettingsTest#testWriteCorruptDataBinaryXml"
-	},
-	{
-          "exclude-filter": "com.android.server.pm.test.SettingsTest#testWriteCorruptDataTextXml"
-	},
-	{
-          "exclude-filter": "com.android.server.pm.test.SettingsTest#testWriteCorruptHeaderBinaryXml"
-	},
-	{
-          "exclude-filter": "com.android.server.pm.test.SettingsTest#testWriteCorruptHeaderTextXml"
-	},
-	{
+        {
           // TODO(b/272714903)
           "exclude-filter": "com.android.server.pm.test.OverlayPathsUninstallSystemUpdatesTest#verify"
-	}
+        }
       ]
     }
   ],
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/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningShellCommandTest.java b/services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningShellCommandTest.java
new file mode 100644
index 0000000..77c3396
--- /dev/null
+++ b/services/tests/RemoteProvisioningServiceTests/src/com/android/server/security/rkp/RemoteProvisioningShellCommandTest.java
@@ -0,0 +1,244 @@
+/*
+ * 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.security.rkp;
+
+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.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.hardware.security.keymint.DeviceInfo;
+import android.hardware.security.keymint.IRemotelyProvisionedComponent;
+import android.hardware.security.keymint.MacedPublicKey;
+import android.hardware.security.keymint.ProtectedData;
+import android.hardware.security.keymint.RpcHardwareInfo;
+import android.os.Binder;
+import android.os.FileUtils;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Arrays;
+import java.util.Base64;
+import java.util.Map;
+
+@RunWith(AndroidJUnit4.class)
+public class RemoteProvisioningShellCommandTest {
+
+    private static class Injector extends RemoteProvisioningShellCommand.Injector {
+
+        private final Map<String, IRemotelyProvisionedComponent> mIrpcs;
+
+        Injector(Map irpcs) {
+            mIrpcs = irpcs;
+        }
+
+        @Override
+        String[] getIrpcNames() {
+            return mIrpcs.keySet().toArray(new String[0]);
+        }
+
+        @Override
+        IRemotelyProvisionedComponent getIrpcBinder(String name) {
+            IRemotelyProvisionedComponent irpc = mIrpcs.get(name);
+            if (irpc == null) {
+                throw new IllegalArgumentException("failed to find " + irpc);
+            }
+            return irpc;
+        }
+    }
+
+    private static class CommandResult {
+        private int mCode;
+        private String mOut;
+        private String mErr;
+
+        CommandResult(int code, String out, String err) {
+            mCode = code;
+            mOut = out;
+            mErr = err;
+        }
+
+        int getCode() {
+            return mCode;
+        }
+
+        String getOut() {
+            return mOut;
+        }
+
+        String getErr() {
+            return mErr;
+        }
+    }
+
+    private static CommandResult exec(
+            RemoteProvisioningShellCommand cmd, String[] args) throws Exception {
+        File in = File.createTempFile("rpsct_in_", null);
+        File out = File.createTempFile("rpsct_out_", null);
+        File err = File.createTempFile("rpsct_err_", null);
+        int code = cmd.exec(
+                new Binder(),
+                new FileInputStream(in).getFD(),
+                new FileOutputStream(out).getFD(),
+                new FileOutputStream(err).getFD(),
+                args);
+        return new CommandResult(
+                code, FileUtils.readTextFile(out, 0, null), FileUtils.readTextFile(err, 0, null));
+    }
+
+    @Test
+    public void list_zeroInstances() throws Exception {
+        RemoteProvisioningShellCommand cmd = new RemoteProvisioningShellCommand(
+                new Injector(Map.of()));
+        CommandResult res = exec(cmd, new String[] {"list"});
+        assertThat(res.getErr()).isEmpty();
+        assertThat(res.getCode()).isEqualTo(0);
+        assertThat(res.getOut()).isEmpty();
+    }
+
+    @Test
+    public void list_oneInstances() throws Exception {
+        RemoteProvisioningShellCommand cmd = new RemoteProvisioningShellCommand(
+                new Injector(Map.of("default", mock(IRemotelyProvisionedComponent.class))));
+        CommandResult res = exec(cmd, new String[] {"list"});
+        assertThat(res.getErr()).isEmpty();
+        assertThat(res.getCode()).isEqualTo(0);
+        assertThat(Arrays.asList(res.getOut().split("\n"))).containsExactly("default");
+    }
+
+    @Test
+    public void list_twoInstances() throws Exception {
+        RemoteProvisioningShellCommand cmd = new RemoteProvisioningShellCommand(
+                new Injector(Map.of(
+                       "default", mock(IRemotelyProvisionedComponent.class),
+                       "strongbox", mock(IRemotelyProvisionedComponent.class))));
+        CommandResult res = exec(cmd, new String[] {"list"});
+        assertThat(res.getErr()).isEmpty();
+        assertThat(res.getCode()).isEqualTo(0);
+        assertThat(Arrays.asList(res.getOut().split("\n"))).containsExactly("default", "strongbox");
+    }
+
+    @Test
+    public void csr_hwVersion1_withChallenge() throws Exception {
+        IRemotelyProvisionedComponent defaultMock = mock(IRemotelyProvisionedComponent.class);
+        RpcHardwareInfo defaultInfo = new RpcHardwareInfo();
+        defaultInfo.versionNumber = 1;
+        defaultInfo.supportedEekCurve = RpcHardwareInfo.CURVE_25519;
+        when(defaultMock.getHardwareInfo()).thenReturn(defaultInfo);
+        doAnswer(invocation -> {
+            ((DeviceInfo) invocation.getArgument(4)).deviceInfo = new byte[] {0x00};
+            ((ProtectedData) invocation.getArgument(5)).protectedData = new byte[] {0x00};
+            return new byte[] {0x77, 0x77, 0x77, 0x77};
+        }).when(defaultMock).generateCertificateRequest(
+                anyBoolean(), any(), any(), any(), any(), any());
+
+        RemoteProvisioningShellCommand cmd = new RemoteProvisioningShellCommand(
+                new Injector(Map.of("default", defaultMock)));
+        CommandResult res = exec(cmd, new String[] {
+                "csr", "--challenge", "dGVzdHRlc3R0ZXN0dGVzdA==", "default"});
+        verify(defaultMock).generateCertificateRequest(
+                /*test_mode=*/eq(false),
+                eq(new MacedPublicKey[0]),
+                eq(Base64.getDecoder().decode(RemoteProvisioningShellCommand.EEK_ED25519_BASE64)),
+                eq(new byte[] {
+                        0x74, 0x65, 0x73, 0x74, 0x74, 0x65, 0x73, 0x74,
+                        0x74, 0x65, 0x73, 0x74, 0x74, 0x65, 0x73, 0x74}),
+                any(DeviceInfo.class),
+                any(ProtectedData.class));
+        assertThat(res.getErr()).isEmpty();
+        assertThat(res.getCode()).isEqualTo(0);
+    }
+
+    @Test
+    public void csr_hwVersion2_withChallenge() throws Exception {
+        IRemotelyProvisionedComponent defaultMock = mock(IRemotelyProvisionedComponent.class);
+        RpcHardwareInfo defaultInfo = new RpcHardwareInfo();
+        defaultInfo.versionNumber = 2;
+        defaultInfo.supportedEekCurve = RpcHardwareInfo.CURVE_P256;
+        when(defaultMock.getHardwareInfo()).thenReturn(defaultInfo);
+        doAnswer(invocation -> {
+            ((DeviceInfo) invocation.getArgument(4)).deviceInfo = new byte[] {0x00};
+            ((ProtectedData) invocation.getArgument(5)).protectedData = new byte[] {0x00};
+            return new byte[] {0x77, 0x77, 0x77, 0x77};
+        }).when(defaultMock).generateCertificateRequest(
+                anyBoolean(), any(), any(), any(), any(), any());
+
+        RemoteProvisioningShellCommand cmd = new RemoteProvisioningShellCommand(
+                new Injector(Map.of("default", defaultMock)));
+        CommandResult res = exec(cmd, new String[] {
+                "csr", "--challenge", "dGVzdHRlc3R0ZXN0dGVzdA==", "default"});
+        verify(defaultMock).generateCertificateRequest(
+                /*test_mode=*/eq(false),
+                eq(new MacedPublicKey[0]),
+                eq(Base64.getDecoder().decode(RemoteProvisioningShellCommand.EEK_P256_BASE64)),
+                eq(new byte[] {
+                        0x74, 0x65, 0x73, 0x74, 0x74, 0x65, 0x73, 0x74,
+                        0x74, 0x65, 0x73, 0x74, 0x74, 0x65, 0x73, 0x74}),
+                any(DeviceInfo.class),
+                any(ProtectedData.class));
+        assertThat(res.getErr()).isEmpty();
+        assertThat(res.getCode()).isEqualTo(0);
+    }
+
+    @Test
+    public void csr_hwVersion3_withoutChallenge() throws Exception {
+        IRemotelyProvisionedComponent defaultMock = mock(IRemotelyProvisionedComponent.class);
+        RpcHardwareInfo defaultInfo = new RpcHardwareInfo();
+        defaultInfo.versionNumber = 3;
+        when(defaultMock.getHardwareInfo()).thenReturn(defaultInfo);
+        when(defaultMock.generateCertificateRequestV2(any(), any()))
+            .thenReturn(new byte[] {0x68, 0x65, 0x6c, 0x6c, 0x6f});
+
+        RemoteProvisioningShellCommand cmd = new RemoteProvisioningShellCommand(
+                new Injector(Map.of("default", defaultMock)));
+        CommandResult res = exec(cmd, new String[] {"csr", "default"});
+        verify(defaultMock).generateCertificateRequestV2(new MacedPublicKey[0], new byte[0]);
+        assertThat(res.getErr()).isEmpty();
+        assertThat(res.getCode()).isEqualTo(0);
+        assertThat(res.getOut()).isEqualTo("aGVsbG8=\n");
+    }
+
+    @Test
+    public void csr_hwVersion3_withChallenge() throws Exception {
+        IRemotelyProvisionedComponent defaultMock = mock(IRemotelyProvisionedComponent.class);
+        RpcHardwareInfo defaultInfo = new RpcHardwareInfo();
+        defaultInfo.versionNumber = 3;
+        when(defaultMock.getHardwareInfo()).thenReturn(defaultInfo);
+        when(defaultMock.generateCertificateRequestV2(any(), any()))
+            .thenReturn(new byte[] {0x68, 0x69});
+
+        RemoteProvisioningShellCommand cmd = new RemoteProvisioningShellCommand(
+                new Injector(Map.of("default", defaultMock)));
+        CommandResult res = exec(cmd, new String[] {"csr", "--challenge", "dHJpYWw=", "default"});
+        verify(defaultMock).generateCertificateRequestV2(
+                new MacedPublicKey[0], new byte[] {0x74, 0x72, 0x69, 0x61, 0x6c});
+        assertThat(res.getErr()).isEmpty();
+        assertThat(res.getCode()).isEqualTo(0);
+        assertThat(res.getOut()).isEqualTo("aGk=\n");
+    }
+}
diff --git a/services/tests/mockingservicestests/src/com/android/server/RescuePartyTest.java b/services/tests/mockingservicestests/src/com/android/server/RescuePartyTest.java
index 1a75170..7b771af 100644
--- a/services/tests/mockingservicestests/src/com/android/server/RescuePartyTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/RescuePartyTest.java
@@ -567,36 +567,36 @@
 
         // Ensure that no action is taken for cases where the failure reason is unknown
         assertEquals(observer.onHealthCheckFailed(null, PackageWatchdog.FAILURE_REASON_UNKNOWN, 1),
-                PackageHealthObserverImpact.USER_IMPACT_NONE);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_0);
 
         // Ensure the correct user impact is returned for each mitigation count.
         assertEquals(observer.onHealthCheckFailed(null,
                 PackageWatchdog.FAILURE_REASON_APP_NOT_RESPONDING, 1),
-                PackageHealthObserverImpact.USER_IMPACT_LOW);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_10);
 
         assertEquals(observer.onHealthCheckFailed(null,
                 PackageWatchdog.FAILURE_REASON_APP_NOT_RESPONDING, 2),
-                PackageHealthObserverImpact.USER_IMPACT_LOW);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_10);
 
         assertEquals(observer.onHealthCheckFailed(null,
                 PackageWatchdog.FAILURE_REASON_APP_NOT_RESPONDING, 3),
-                PackageHealthObserverImpact.USER_IMPACT_HIGH);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_50);
 
         assertEquals(observer.onHealthCheckFailed(null,
                 PackageWatchdog.FAILURE_REASON_APP_NOT_RESPONDING, 4),
-                PackageHealthObserverImpact.USER_IMPACT_HIGH);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_50);
     }
 
     @Test
     public void testBootLoopLevels() {
         RescuePartyObserver observer = RescuePartyObserver.getInstance(mMockContext);
 
-        assertEquals(observer.onBootLoop(0), PackageHealthObserverImpact.USER_IMPACT_NONE);
-        assertEquals(observer.onBootLoop(1), PackageHealthObserverImpact.USER_IMPACT_LOW);
-        assertEquals(observer.onBootLoop(2), PackageHealthObserverImpact.USER_IMPACT_LOW);
-        assertEquals(observer.onBootLoop(3), PackageHealthObserverImpact.USER_IMPACT_HIGH);
-        assertEquals(observer.onBootLoop(4), PackageHealthObserverImpact.USER_IMPACT_HIGH);
-        assertEquals(observer.onBootLoop(5), PackageHealthObserverImpact.USER_IMPACT_HIGH);
+        assertEquals(observer.onBootLoop(0), PackageHealthObserverImpact.USER_IMPACT_LEVEL_0);
+        assertEquals(observer.onBootLoop(1), PackageHealthObserverImpact.USER_IMPACT_LEVEL_10);
+        assertEquals(observer.onBootLoop(2), PackageHealthObserverImpact.USER_IMPACT_LEVEL_10);
+        assertEquals(observer.onBootLoop(3), PackageHealthObserverImpact.USER_IMPACT_LEVEL_50);
+        assertEquals(observer.onBootLoop(4), PackageHealthObserverImpact.USER_IMPACT_LEVEL_50);
+        assertEquals(observer.onBootLoop(5), PackageHealthObserverImpact.USER_IMPACT_LEVEL_100);
     }
 
     @Test
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueModernImplTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueModernImplTest.java
index ec177c9..3fb7fb4 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueModernImplTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueModernImplTest.java
@@ -74,16 +74,17 @@
 import android.os.DropBoxManager;
 import android.os.HandlerThread;
 import android.os.SystemClock;
+import android.os.TestLooperManager;
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.IndentingPrintWriter;
 import android.util.Pair;
 
 import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
 
 import com.android.internal.util.FrameworkStatsLog;
 import com.android.server.ExtendedMockitoRule;
-import com.android.server.am.BroadcastQueueTest.SyncBarrier;
 
 import org.junit.After;
 import org.junit.Before;
@@ -96,6 +97,7 @@
 import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 @SmallTest
 public final class BroadcastQueueModernImplTest {
@@ -111,6 +113,7 @@
     @Mock BroadcastProcessQueue mQueue4;
 
     HandlerThread mHandlerThread;
+    TestLooperManager mLooper;
 
     BroadcastConstants mConstants;
     BroadcastQueueModernImpl mImpl;
@@ -127,6 +130,10 @@
         mHandlerThread = new HandlerThread(getClass().getSimpleName());
         mHandlerThread.start();
 
+        // Pause all event processing until a test chooses to resume
+        mLooper = Objects.requireNonNull(InstrumentationRegistry.getInstrumentation()
+                .acquireLooperManager(mHandlerThread.getLooper()));
+
         mConstants = new BroadcastConstants(Settings.Global.BROADCAST_FG_CONSTANTS);
         mConstants.DELAY_URGENT_MILLIS = -120_000;
         mConstants.DELAY_NORMAL_MILLIS = 10_000;
@@ -167,6 +174,17 @@
         mHandlerThread.quit();
     }
 
+    /**
+     * Un-pause our handler to process pending events, wait for our queue to go
+     * idle, and then re-pause the handler.
+     */
+    private void waitForIdle() throws Exception {
+        mLooper.release();
+        mImpl.waitForIdle(LOG_WRITER_INFO);
+        mLooper = Objects.requireNonNull(InstrumentationRegistry.getInstrumentation()
+                .acquireLooperManager(mHandlerThread.getLooper()));
+    }
+
     private static void assertOrphan(BroadcastProcessQueue queue) {
         assertNull(queue.runnableAtNext);
         assertNull(queue.runnableAtPrev);
@@ -237,9 +255,23 @@
     }
 
     private void enqueueOrReplaceBroadcast(BroadcastProcessQueue queue,
+            BroadcastRecord record, int recordIndex) {
+        enqueueOrReplaceBroadcast(queue, record, recordIndex, false, 42_000_000L);
+    }
+
+    private void enqueueOrReplaceBroadcast(BroadcastProcessQueue queue,
             BroadcastRecord record, int recordIndex, long enqueueTime) {
-        queue.enqueueOrReplaceBroadcast(record, recordIndex, false);
+        enqueueOrReplaceBroadcast(queue, record, recordIndex, false, enqueueTime);
+    }
+
+    private void enqueueOrReplaceBroadcast(BroadcastProcessQueue queue,
+            BroadcastRecord record, int recordIndex, boolean wouldBeSkipped, long enqueueTime) {
+        queue.enqueueOrReplaceBroadcast(record, recordIndex, wouldBeSkipped, (r, i) -> {
+            throw new UnsupportedOperationException();
+        });
         record.enqueueTime = enqueueTime;
+        record.enqueueRealTime = enqueueTime;
+        record.enqueueClockTime = enqueueTime;
     }
 
     @Test
@@ -370,7 +402,7 @@
                 .setDeferralPolicy(BroadcastOptions.DEFERRAL_POLICY_UNTIL_ACTIVE);
         final BroadcastRecord airplaneRecord = makeBroadcastRecord(airplane, options,
                 List.of(makeMockRegisteredReceiver()), false);
-        queue.enqueueOrReplaceBroadcast(airplaneRecord, 0, false);
+        enqueueOrReplaceBroadcast(queue, airplaneRecord, 0);
 
         queue.setProcessAndUidCached(null, false);
         final long notCachedRunnableAt = queue.getRunnableAt();
@@ -397,7 +429,7 @@
                 .setDeferralPolicy(BroadcastOptions.DEFERRAL_POLICY_NONE);
         final BroadcastRecord airplaneRecord = makeBroadcastRecord(airplane, options,
                 List.of(makeMockRegisteredReceiver()), false);
-        queue.enqueueOrReplaceBroadcast(airplaneRecord, 0, false);
+        enqueueOrReplaceBroadcast(queue, airplaneRecord, 0);
 
         queue.setProcessAndUidCached(null, false);
         final long notCachedRunnableAt = queue.getRunnableAt();
@@ -421,12 +453,12 @@
         // enqueue a bg-priority broadcast then a fg-priority one
         final Intent timezone = new Intent(Intent.ACTION_TIMEZONE_CHANGED);
         final BroadcastRecord timezoneRecord = makeBroadcastRecord(timezone);
-        queue.enqueueOrReplaceBroadcast(timezoneRecord, 0, false);
+        enqueueOrReplaceBroadcast(queue, timezoneRecord, 0);
 
         final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
         airplane.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
         final BroadcastRecord airplaneRecord = makeBroadcastRecord(airplane);
-        queue.enqueueOrReplaceBroadcast(airplaneRecord, 0, false);
+        enqueueOrReplaceBroadcast(queue, airplaneRecord, 0);
 
         // verify that:
         // (a) the queue is immediately runnable by existence of a fg-priority broadcast
@@ -457,7 +489,7 @@
         final BroadcastRecord airplaneRecord = makeBroadcastRecord(airplane, null,
                 List.of(withPriority(makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN), 10),
                         withPriority(makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN), 0)), true);
-        queue.enqueueOrReplaceBroadcast(airplaneRecord, 1, false);
+        enqueueOrReplaceBroadcast(queue, airplaneRecord, 1);
 
         assertFalse(queue.isRunnable());
         assertEquals(BroadcastProcessQueue.REASON_BLOCKED, queue.getRunnableAtReason());
@@ -481,7 +513,7 @@
         final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
         final BroadcastRecord airplaneRecord = makeBroadcastRecord(airplane,
                 List.of(makeMockRegisteredReceiver()));
-        queue.enqueueOrReplaceBroadcast(airplaneRecord, 0, false);
+        enqueueOrReplaceBroadcast(queue, airplaneRecord, 0);
 
         mConstants.MAX_PENDING_BROADCASTS = 128;
         queue.invalidateRunnableAt();
@@ -507,11 +539,11 @@
                 new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED),
                 List.of(makeMockRegisteredReceiver()));
 
-        queue.enqueueOrReplaceBroadcast(lazyRecord, 0, false);
+        enqueueOrReplaceBroadcast(queue, lazyRecord, 0);
         assertThat(queue.getRunnableAt()).isGreaterThan(lazyRecord.enqueueTime);
         assertThat(queue.getRunnableAtReason()).isNotEqualTo(testRunnableAtReason);
 
-        queue.enqueueOrReplaceBroadcast(testRecord, 0, false);
+        enqueueOrReplaceBroadcast(queue, testRecord, 0);
         assertThat(queue.getRunnableAt()).isAtMost(testRecord.enqueueTime);
         assertThat(queue.getRunnableAtReason()).isEqualTo(testRunnableAtReason);
     }
@@ -573,22 +605,22 @@
         BroadcastProcessQueue queue = new BroadcastProcessQueue(mConstants,
                 PACKAGE_GREEN, getUidForPackage(PACKAGE_GREEN));
 
-        queue.enqueueOrReplaceBroadcast(
+        enqueueOrReplaceBroadcast(queue,
                 makeBroadcastRecord(new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED)
-                        .addFlags(Intent.FLAG_RECEIVER_OFFLOAD)), 0, false);
-        queue.enqueueOrReplaceBroadcast(
-                makeBroadcastRecord(new Intent(Intent.ACTION_TIMEZONE_CHANGED)), 0, false);
-        queue.enqueueOrReplaceBroadcast(
+                        .addFlags(Intent.FLAG_RECEIVER_OFFLOAD)), 0);
+        enqueueOrReplaceBroadcast(queue,
+                makeBroadcastRecord(new Intent(Intent.ACTION_TIMEZONE_CHANGED)), 0);
+        enqueueOrReplaceBroadcast(queue,
                 makeBroadcastRecord(new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED)
-                        .addFlags(Intent.FLAG_RECEIVER_FOREGROUND)), 0, false);
-        queue.enqueueOrReplaceBroadcast(
+                        .addFlags(Intent.FLAG_RECEIVER_FOREGROUND)), 0);
+        enqueueOrReplaceBroadcast(queue,
                 makeBroadcastRecord(new Intent(Intent.ACTION_ALARM_CHANGED)
-                        .addFlags(Intent.FLAG_RECEIVER_OFFLOAD)), 0, false);
-        queue.enqueueOrReplaceBroadcast(
-                makeBroadcastRecord(new Intent(Intent.ACTION_TIME_TICK)), 0, false);
-        queue.enqueueOrReplaceBroadcast(
+                        .addFlags(Intent.FLAG_RECEIVER_OFFLOAD)), 0);
+        enqueueOrReplaceBroadcast(queue,
+                makeBroadcastRecord(new Intent(Intent.ACTION_TIME_TICK)), 0);
+        enqueueOrReplaceBroadcast(queue,
                 makeBroadcastRecord(new Intent(Intent.ACTION_LOCALE_CHANGED)
-                        .addFlags(Intent.FLAG_RECEIVER_FOREGROUND)), 0, false);
+                        .addFlags(Intent.FLAG_RECEIVER_FOREGROUND)), 0);
 
         queue.makeActiveNextPending();
         assertEquals(Intent.ACTION_LOCKED_BOOT_COMPLETED, queue.getActive().intent.getAction());
@@ -822,9 +854,6 @@
         optionsAlarmVolumeChanged.setDeliveryGroupMatchingKey("audio",
                 String.valueOf(AudioManager.STREAM_ALARM));
 
-        // Halt all processing so that we get a consistent view
-        mHandlerThread.getLooper().getQueue().postSyncBarrier();
-
         mImpl.enqueueBroadcastLocked(makeBroadcastRecord(timeTick, optionsTimeTick));
         mImpl.enqueueBroadcastLocked(makeBroadcastRecord(musicVolumeChanged,
                 optionsMusicVolumeChanged));
@@ -891,9 +920,6 @@
                 String.valueOf(TEST_UID2));
         optionsPackageChangedForUid.setDeliveryGroupExtrasMerger(extrasMerger);
 
-        // Halt all processing so that we get a consistent view
-        mHandlerThread.getLooper().getQueue().postSyncBarrier();
-
         mImpl.enqueueBroadcastLocked(makeBroadcastRecord(packageChangedForUid,
                 optionsPackageChangedForUid));
         mImpl.enqueueBroadcastLocked(makeBroadcastRecord(packageChangedForUid2,
@@ -941,9 +967,6 @@
                 BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT);
         optionsAlarmVolumeChanged.setDeliveryGroupMatchingFilter(filterAlarmVolumeChanged);
 
-        // Halt all processing so that we get a consistent view
-        mHandlerThread.getLooper().getQueue().postSyncBarrier();
-
         mImpl.enqueueBroadcastLocked(makeBroadcastRecord(timeTick, optionsTimeTick));
         mImpl.enqueueBroadcastLocked(makeBroadcastRecord(musicVolumeChanged,
                 optionsMusicVolumeChanged));
@@ -990,9 +1013,6 @@
         final Pair<Intent, BroadcastOptions> dropboxEntryBroadcast3 = createDropboxBroadcast(
                 "TAG_A", now + 2000, 7);
 
-        // Halt all processing so that we get a consistent view
-        mHandlerThread.getLooper().getQueue().postSyncBarrier();
-
         mImpl.enqueueBroadcastLocked(makeBroadcastRecord(dropboxEntryBroadcast1.first,
                 dropboxEntryBroadcast1.second));
         mImpl.enqueueBroadcastLocked(makeBroadcastRecord(dropboxEntryBroadcast2.first,
@@ -1022,9 +1042,6 @@
                 .setDeliveryGroupPolicy(BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT)
                 .setDeliveryGroupMatchingKey(Intent.ACTION_CLOSE_SYSTEM_DIALOGS, "testing");
 
-        // Halt all processing so that we get a consistent view
-        mHandlerThread.getLooper().getQueue().postSyncBarrier();
-
         mImpl.enqueueBroadcastLocked(makeBroadcastRecord(
                 closeSystemDialogs1, optionsCloseSystemDialog1));
         mImpl.enqueueBroadcastLocked(makeBroadcastRecord(
@@ -1074,9 +1091,6 @@
         final Intent userPresent = new Intent(Intent.ACTION_USER_PRESENT);
         userPresent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
 
-        // Halt all processing so that we get a consistent view
-        mHandlerThread.getLooper().getQueue().postSyncBarrier();
-
         final BroadcastRecord userPresentRecord1 = makeBroadcastRecord(userPresent);
         final BroadcastRecord userPresentRecord2 = makeBroadcastRecord(userPresent);
 
@@ -1115,8 +1129,6 @@
                 makeManifestReceiver(PACKAGE_YELLOW, CLASS_YELLOW)
         ));
 
-        // Halt all processing so that we get a consistent view
-        mHandlerThread.getLooper().getQueue().postSyncBarrier();
         mImpl.enqueueBroadcastLocked(record1);
         mImpl.enqueueBroadcastLocked(record2);
 
@@ -1138,12 +1150,9 @@
         final BroadcastOptions optionsTimeTick = BroadcastOptions.makeBasic();
         optionsTimeTick.setDeliveryGroupPolicy(BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT);
 
-        // Halt all processing so that we get a consistent view
-        try (SyncBarrier b = new SyncBarrier(mHandlerThread)) {
-            mImpl.enqueueBroadcastLocked(makeBroadcastRecord(timeTick, optionsTimeTick));
-            mImpl.enqueueBroadcastLocked(makeBroadcastRecord(timeTick, optionsTimeTick));
-        }
-        mImpl.waitForIdle(LOG_WRITER_INFO);
+        mImpl.enqueueBroadcastLocked(makeBroadcastRecord(timeTick, optionsTimeTick));
+        mImpl.enqueueBroadcastLocked(makeBroadcastRecord(timeTick, optionsTimeTick));
+        waitForIdle();
 
         // Verify that there is only one delivery event reported since one of the broadcasts
         // should have been skipped.
@@ -1164,8 +1173,8 @@
 
         final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK)
                 .addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-        queue.enqueueOrReplaceBroadcast(makeBroadcastRecord(timeTick,
-                List.of(makeMockRegisteredReceiver())), 0, false);
+        enqueueOrReplaceBroadcast(queue, makeBroadcastRecord(timeTick,
+                List.of(makeMockRegisteredReceiver())), 0);
         assertEquals(ProcessList.SCHED_GROUP_UNDEFINED, queue.getPreferredSchedulingGroupLocked());
 
         // Make the foreground broadcast as active.
@@ -1176,15 +1185,15 @@
         assertEquals(ProcessList.SCHED_GROUP_UNDEFINED, queue.getPreferredSchedulingGroupLocked());
 
         final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
-        queue.enqueueOrReplaceBroadcast(makeBroadcastRecord(airplane,
-                List.of(makeMockRegisteredReceiver())), 0, false);
+        enqueueOrReplaceBroadcast(queue, makeBroadcastRecord(airplane,
+                List.of(makeMockRegisteredReceiver())), 0);
 
         // Make the background broadcast as active.
         queue.makeActiveNextPending();
         assertEquals(ProcessList.SCHED_GROUP_BACKGROUND, queue.getPreferredSchedulingGroupLocked());
 
-        queue.enqueueOrReplaceBroadcast(makeBroadcastRecord(timeTick,
-                List.of(makeMockRegisteredReceiver())), 0, false);
+        enqueueOrReplaceBroadcast(queue, makeBroadcastRecord(timeTick,
+                List.of(makeMockRegisteredReceiver())), 0);
         // Even though the active broadcast is not a foreground one, scheduling group will be
         // DEFAULT since there is a foreground broadcast waiting to be delivered.
         assertEquals(ProcessList.SCHED_GROUP_DEFAULT, queue.getPreferredSchedulingGroupLocked());
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
index 90e6a2d..7be1d7c 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
@@ -77,6 +77,7 @@
 import android.os.IBinder;
 import android.os.PowerExemptionManager;
 import android.os.SystemClock;
+import android.os.TestLooperManager;
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.Log;
@@ -146,6 +147,7 @@
 
     private Context mContext;
     private HandlerThread mHandlerThread;
+    private TestLooperManager mLooper;
     private AtomicInteger mNextPid;
 
     @Mock
@@ -206,6 +208,11 @@
 
         mHandlerThread = new HandlerThread(TAG);
         mHandlerThread.start();
+
+        // Pause all event processing until a test chooses to resume
+        mLooper = Objects.requireNonNull(InstrumentationRegistry.getInstrumentation()
+                .acquireLooperManager(mHandlerThread.getLooper()));
+
         mNextPid = new AtomicInteger(100);
 
         LocalServices.removeServiceForTest(DropBoxManagerInternal.class);
@@ -360,25 +367,6 @@
         }
     }
 
-    /**
-     * Helper that leverages try-with-resources to pause dispatch of
-     * {@link #mHandlerThread} until released.
-     */
-    static class SyncBarrier implements AutoCloseable {
-        private final int mToken;
-        private HandlerThread mThread;
-
-        SyncBarrier(HandlerThread thread) {
-            mThread = thread;
-            mToken = mThread.getLooper().getQueue().postSyncBarrier();
-        }
-
-        @Override
-        public void close() throws Exception {
-            mThread.getLooper().getQueue().removeSyncBarrier(mToken);
-        }
-    }
-
     private enum ProcessStartBehavior {
         /** Process starts successfully */
         SUCCESS,
@@ -671,8 +659,15 @@
         }
     }
 
+    /**
+     * Un-pause our handler to process pending events, wait for our queue to go
+     * idle, and then re-pause the handler.
+     */
     private void waitForIdle() throws Exception {
+        mLooper.release();
         mQueue.waitForIdle(LOG_WRITER_INFO);
+        mLooper = Objects.requireNonNull(InstrumentationRegistry.getInstrumentation()
+                .acquireLooperManager(mHandlerThread.getLooper()));
     }
 
     private void verifyScheduleReceiver(ProcessRecord app, Intent intent) throws Exception {
@@ -1156,23 +1151,21 @@
         final ProcessRecord receiverApp = makeActiveProcessRecord(PACKAGE_GREEN);
 
         final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
-        try (SyncBarrier b = new SyncBarrier(mHandlerThread)) {
-            enqueueBroadcast(makeBroadcastRecord(airplane, callerApp, new ArrayList<>(
-                    List.of(makeRegisteredReceiver(receiverApp),
-                            makeManifestReceiver(PACKAGE_GREEN, CLASS_RED),
-                            makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN),
-                            makeManifestReceiver(PACKAGE_GREEN, CLASS_BLUE)))));
+        enqueueBroadcast(makeBroadcastRecord(airplane, callerApp, new ArrayList<>(
+                List.of(makeRegisteredReceiver(receiverApp),
+                        makeManifestReceiver(PACKAGE_GREEN, CLASS_RED),
+                        makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN),
+                        makeManifestReceiver(PACKAGE_GREEN, CLASS_BLUE)))));
 
-            synchronized (mAms) {
-                mQueue.cleanupDisabledPackageReceiversLocked(PACKAGE_GREEN, Set.of(CLASS_GREEN),
-                        UserHandle.USER_SYSTEM);
+        synchronized (mAms) {
+            mQueue.cleanupDisabledPackageReceiversLocked(PACKAGE_GREEN, Set.of(CLASS_GREEN),
+                    UserHandle.USER_SYSTEM);
 
-                // Also try clearing out other unrelated things that should leave
-                // the final receiver intact
-                mQueue.cleanupDisabledPackageReceiversLocked(PACKAGE_RED, null,
-                        UserHandle.USER_SYSTEM);
-                mQueue.cleanupDisabledPackageReceiversLocked(null, null, USER_GUEST);
-            }
+            // Also try clearing out other unrelated things that should leave
+            // the final receiver intact
+            mQueue.cleanupDisabledPackageReceiversLocked(PACKAGE_RED, null,
+                    UserHandle.USER_SYSTEM);
+            mQueue.cleanupDisabledPackageReceiversLocked(null, null, USER_GUEST);
 
             // To maximize test coverage, dump current state; we're not worried
             // about the actual output, just that we don't crash
@@ -1200,21 +1193,19 @@
 
         final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
         final Intent timeZone = new Intent(Intent.ACTION_TIMEZONE_CHANGED);
-        try (SyncBarrier b = new SyncBarrier(mHandlerThread)) {
-            enqueueBroadcast(makeBroadcastRecord(airplane, callerApp, USER_GUEST, new ArrayList<>(
-                    List.of(makeRegisteredReceiver(callerApp),
-                            makeManifestReceiver(PACKAGE_GREEN, CLASS_RED, USER_GUEST),
-                            makeManifestReceiver(PACKAGE_BLUE, CLASS_GREEN, USER_GUEST),
-                            makeManifestReceiver(PACKAGE_YELLOW, CLASS_BLUE, USER_GUEST)))));
-            enqueueBroadcast(makeBroadcastRecord(timeZone, callerApp, USER_GUEST, new ArrayList<>(
-                    List.of(makeRegisteredReceiver(callerApp),
-                            makeManifestReceiver(PACKAGE_GREEN, CLASS_RED, USER_GUEST),
-                            makeManifestReceiver(PACKAGE_BLUE, CLASS_GREEN, USER_GUEST),
-                            makeManifestReceiver(PACKAGE_YELLOW, CLASS_BLUE, USER_GUEST)))));
+        enqueueBroadcast(makeBroadcastRecord(airplane, callerApp, USER_GUEST, new ArrayList<>(
+                List.of(makeRegisteredReceiver(callerApp),
+                        makeManifestReceiver(PACKAGE_GREEN, CLASS_RED, USER_GUEST),
+                        makeManifestReceiver(PACKAGE_BLUE, CLASS_GREEN, USER_GUEST),
+                        makeManifestReceiver(PACKAGE_YELLOW, CLASS_BLUE, USER_GUEST)))));
+        enqueueBroadcast(makeBroadcastRecord(timeZone, callerApp, USER_GUEST, new ArrayList<>(
+                List.of(makeRegisteredReceiver(callerApp),
+                        makeManifestReceiver(PACKAGE_GREEN, CLASS_RED, USER_GUEST),
+                        makeManifestReceiver(PACKAGE_BLUE, CLASS_GREEN, USER_GUEST),
+                        makeManifestReceiver(PACKAGE_YELLOW, CLASS_BLUE, USER_GUEST)))));
 
-            synchronized (mAms) {
-                mQueue.cleanupDisabledPackageReceiversLocked(null, null, USER_GUEST);
-            }
+        synchronized (mAms) {
+            mQueue.cleanupDisabledPackageReceiversLocked(null, null, USER_GUEST);
         }
 
         waitForIdle();
@@ -1240,15 +1231,12 @@
         final ProcessRecord oldApp = makeActiveProcessRecord(PACKAGE_GREEN);
 
         final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
-        try (SyncBarrier b = new SyncBarrier(mHandlerThread)) {
-            enqueueBroadcast(makeBroadcastRecord(airplane, callerApp, new ArrayList<>(
-                    List.of(makeRegisteredReceiver(oldApp),
-                            makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN)))));
-
-            synchronized (mAms) {
-                oldApp.killLocked(TAG, 42, false);
-                mQueue.onApplicationCleanupLocked(oldApp);
-            }
+        enqueueBroadcast(makeBroadcastRecord(airplane, callerApp, new ArrayList<>(
+                List.of(makeRegisteredReceiver(oldApp),
+                        makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN)))));
+        synchronized (mAms) {
+            oldApp.killLocked(TAG, 42, false);
+            mQueue.onApplicationCleanupLocked(oldApp);
         }
         waitForIdle();
 
@@ -1621,17 +1609,14 @@
         final Intent timezone = new Intent(Intent.ACTION_TIMEZONE_CHANGED);
         final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
         airplane.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-        try (SyncBarrier b = new SyncBarrier(mHandlerThread)) {
-            enqueueBroadcast(makeBroadcastRecord(timezone, callerApp,
-                    List.of(makeRegisteredReceiver(receiverBlueApp, 10),
-                            makeRegisteredReceiver(receiverGreenApp, 10),
-                            makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE),
-                            makeManifestReceiver(PACKAGE_YELLOW, CLASS_YELLOW),
-                            makeRegisteredReceiver(receiverYellowApp, -10))));
-            enqueueBroadcast(makeBroadcastRecord(airplane, callerApp,
-                    List.of(makeRegisteredReceiver(receiverBlueApp))));
-        }
-
+        enqueueBroadcast(makeBroadcastRecord(timezone, callerApp,
+                List.of(makeRegisteredReceiver(receiverBlueApp, 10),
+                        makeRegisteredReceiver(receiverGreenApp, 10),
+                        makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE),
+                        makeManifestReceiver(PACKAGE_YELLOW, CLASS_YELLOW),
+                        makeRegisteredReceiver(receiverYellowApp, -10))));
+        enqueueBroadcast(makeBroadcastRecord(airplane, callerApp,
+                List.of(makeRegisteredReceiver(receiverBlueApp))));
         waitForIdle();
 
         // Ignore the final foreground broadcast
@@ -1745,17 +1730,15 @@
         final IIntentReceiver resultToFirst = mock(IIntentReceiver.class);
         final IIntentReceiver resultToSecond = mock(IIntentReceiver.class);
 
-        try (SyncBarrier b = new SyncBarrier(mHandlerThread)) {
-            enqueueBroadcast(makeOrderedBroadcastRecord(timezoneFirst, callerApp,
-                    List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE),
-                            makeManifestReceiver(PACKAGE_BLUE, CLASS_GREEN)),
-                    resultToFirst, null));
-            enqueueBroadcast(makeBroadcastRecord(airplane, callerApp,
-                    List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_RED))));
-            enqueueBroadcast(makeOrderedBroadcastRecord(timezoneSecond, callerApp,
-                    List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_GREEN)),
-                    resultToSecond, null));
-        }
+        enqueueBroadcast(makeOrderedBroadcastRecord(timezoneFirst, callerApp,
+                List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE),
+                        makeManifestReceiver(PACKAGE_BLUE, CLASS_GREEN)),
+                resultToFirst, null));
+        enqueueBroadcast(makeBroadcastRecord(airplane, callerApp,
+                List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_RED))));
+        enqueueBroadcast(makeOrderedBroadcastRecord(timezoneSecond, callerApp,
+                List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_GREEN)),
+                resultToSecond, null));
 
         waitForIdle();
         final IApplicationThread blueThread = mAms.getProcessRecordLocked(PACKAGE_BLUE,
@@ -1836,14 +1819,12 @@
         timeTickFirst.putExtra(Intent.EXTRA_INDEX, "third");
         timeTickThird.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
 
-        try (SyncBarrier b = new SyncBarrier(mHandlerThread)) {
-            enqueueBroadcast(makeBroadcastRecord(timeTickFirst, callerApp,
-                    List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE))));
-            enqueueBroadcast(makeBroadcastRecord(timeTickSecond, callerApp,
-                    List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE))));
-            enqueueBroadcast(makeBroadcastRecord(timeTickThird, callerApp,
-                    List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE))));
-        }
+        enqueueBroadcast(makeBroadcastRecord(timeTickFirst, callerApp,
+                List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE))));
+        enqueueBroadcast(makeBroadcastRecord(timeTickSecond, callerApp,
+                List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE))));
+        enqueueBroadcast(makeBroadcastRecord(timeTickThird, callerApp,
+                List.of(makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE))));
 
         waitForIdle();
         final IApplicationThread blueThread = mAms.getProcessRecordLocked(PACKAGE_BLUE,
@@ -1878,26 +1859,26 @@
         assertTrue(mQueue.isIdleLocked());
         assertTrue(mQueue.isBeyondBarrierLocked(beforeFirst));
 
-        try (SyncBarrier b = new SyncBarrier(mHandlerThread)) {
-            final Intent timezone = new Intent(Intent.ACTION_TIMEZONE_CHANGED);
-            enqueueBroadcast(makeBroadcastRecord(timezone, callerApp,
-                    List.of(makeRegisteredReceiver(receiverApp))));
-            afterFirst = SystemClock.uptimeMillis();
+        final Intent timezone = new Intent(Intent.ACTION_TIMEZONE_CHANGED);
+        enqueueBroadcast(makeBroadcastRecord(timezone, callerApp,
+                List.of(makeRegisteredReceiver(receiverApp))));
+        afterFirst = SystemClock.uptimeMillis();
 
-            assertFalse(mQueue.isIdleLocked());
-            assertTrue(mQueue.isBeyondBarrierLocked(beforeFirst));
-            assertFalse(mQueue.isBeyondBarrierLocked(afterFirst));
+        assertFalse(mQueue.isIdleLocked());
+        assertTrue(mQueue.isBeyondBarrierLocked(beforeFirst));
+        assertFalse(mQueue.isBeyondBarrierLocked(afterFirst));
 
-            final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
-            enqueueBroadcast(makeBroadcastRecord(airplane, callerApp,
-                    List.of(makeRegisteredReceiver(receiverApp))));
-            afterSecond = SystemClock.uptimeMillis() + 10;
+        final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+        enqueueBroadcast(makeBroadcastRecord(airplane, callerApp,
+                List.of(makeRegisteredReceiver(receiverApp))));
+        afterSecond = SystemClock.uptimeMillis() + 10;
 
-            assertFalse(mQueue.isIdleLocked());
-            assertTrue(mQueue.isBeyondBarrierLocked(beforeFirst));
-            assertFalse(mQueue.isBeyondBarrierLocked(afterFirst));
-            assertFalse(mQueue.isBeyondBarrierLocked(afterSecond));
-        }
+        assertFalse(mQueue.isIdleLocked());
+        assertTrue(mQueue.isBeyondBarrierLocked(beforeFirst));
+        assertFalse(mQueue.isBeyondBarrierLocked(afterFirst));
+        assertFalse(mQueue.isBeyondBarrierLocked(afterSecond));
+
+        mLooper.release();
 
         mQueue.waitForBarrier(LOG_WRITER_INFO);
         assertTrue(mQueue.isBeyondBarrierLocked(afterFirst));
@@ -2048,25 +2029,23 @@
         final ProcessRecord receiverBlueApp = makeActiveProcessRecord(PACKAGE_BLUE);
 
         final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
-        try (SyncBarrier b = new SyncBarrier(mHandlerThread)) {
-            final Object greenReceiver = makeRegisteredReceiver(receiverGreenApp);
-            final Object blueReceiver = makeRegisteredReceiver(receiverBlueApp);
-            final Object yellowReceiver = makeManifestReceiver(PACKAGE_YELLOW, CLASS_YELLOW);
-            final Object orangeReceiver = makeManifestReceiver(PACKAGE_ORANGE, CLASS_ORANGE);
-            enqueueBroadcast(makeBroadcastRecord(airplane, callerApp,
-                    List.of(greenReceiver, blueReceiver, yellowReceiver, orangeReceiver)));
+        final Object greenReceiver = makeRegisteredReceiver(receiverGreenApp);
+        final Object blueReceiver = makeRegisteredReceiver(receiverBlueApp);
+        final Object yellowReceiver = makeManifestReceiver(PACKAGE_YELLOW, CLASS_YELLOW);
+        final Object orangeReceiver = makeManifestReceiver(PACKAGE_ORANGE, CLASS_ORANGE);
+        enqueueBroadcast(makeBroadcastRecord(airplane, callerApp,
+                List.of(greenReceiver, blueReceiver, yellowReceiver, orangeReceiver)));
 
-            doAnswer(invocation -> {
-                final BroadcastRecord r = invocation.getArgument(0);
-                final Object o = invocation.getArgument(1);
-                if (airplane.getAction().equals(r.intent.getAction())
-                        && (isReceiverEquals(o, greenReceiver)
-                                || isReceiverEquals(o, orangeReceiver))) {
-                    return "test skipped receiver";
-                }
-                return null;
-            }).when(mSkipPolicy).shouldSkipMessage(any(BroadcastRecord.class), any());
-        }
+        doAnswer(invocation -> {
+            final BroadcastRecord r = invocation.getArgument(0);
+            final Object o = invocation.getArgument(1);
+            if (airplane.getAction().equals(r.intent.getAction())
+                    && (isReceiverEquals(o, greenReceiver)
+                            || isReceiverEquals(o, orangeReceiver))) {
+                return "test skipped receiver";
+            }
+            return null;
+        }).when(mSkipPolicy).shouldSkipMessage(any(BroadcastRecord.class), any());
 
         waitForIdle();
         // Verify that only blue and yellow receiver apps received the broadcast.
diff --git a/services/tests/mockingservicestests/src/com/android/server/backup/BackupAndRestoreFeatureFlagsTest.java b/services/tests/mockingservicestests/src/com/android/server/backup/BackupAndRestoreFeatureFlagsTest.java
index 201da35..9f685b4 100644
--- a/services/tests/mockingservicestests/src/com/android/server/backup/BackupAndRestoreFeatureFlagsTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/backup/BackupAndRestoreFeatureFlagsTest.java
@@ -104,4 +104,24 @@
         assertThat(BackupAndRestoreFeatureFlags.getFullBackupUtilsRouteBufferSizeBytes())
                 .isEqualTo(5678);
     }
+
+    @Test
+    public void getUnifiedRestoreContinueAfterTransportFailureInKvRestore_notSet_returnsDefault() {
+        assertThat(
+                BackupAndRestoreFeatureFlags
+                        .getUnifiedRestoreContinueAfterTransportFailureInKvRestore())
+                .isEqualTo(true);
+    }
+
+    @Test
+    public void getUnifiedRestoreContinueAfterTransportFailureInKvRestore_set_returnsSetValue() {
+        DeviceConfig.setProperty(/*namespace=*/ "backup_and_restore",
+                /*name=*/ "unified_restore_continue_after_transport_failure_in_kv_restore",
+                /*value=*/ "false", /*makeDefault=*/ false);
+
+        assertThat(
+                BackupAndRestoreFeatureFlags
+                        .getUnifiedRestoreContinueAfterTransportFailureInKvRestore())
+                .isEqualTo(false);
+    }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/backup/restore/PerformUnifiedRestoreTaskTest.java b/services/tests/mockingservicestests/src/com/android/server/backup/restore/PerformUnifiedRestoreTaskTest.java
index 017c939..c84797f 100644
--- a/services/tests/mockingservicestests/src/com/android/server/backup/restore/PerformUnifiedRestoreTaskTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/backup/restore/PerformUnifiedRestoreTaskTest.java
@@ -25,20 +25,33 @@
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
 
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.BackupTransport;
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.os.Message;
+import android.os.RemoteException;
+import android.platform.test.annotations.Presubmit;
+import android.provider.DeviceConfig;
+
 import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
-import android.app.backup.BackupDataInput;
-import android.app.backup.BackupDataOutput;
-import android.platform.test.annotations.Presubmit;
-
+import com.android.modules.utils.testing.TestableDeviceConfig;
 import com.android.server.backup.UserBackupManagerService;
+import com.android.server.backup.internal.BackupHandler;
+import com.android.server.backup.transport.BackupTransportClient;
+import com.android.server.backup.transport.TransportConnection;
+import com.android.server.backup.transport.TransportNotAvailableException;
 
 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.Mockito;
 import org.mockito.MockitoAnnotations;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
@@ -62,9 +75,14 @@
     private static final String SYSTEM_PACKAGE_NAME = "android";
     private static final String NON_SYSTEM_PACKAGE_NAME = "package";
 
-    @Mock private BackupDataInput mBackupDataInput;
-    @Mock private BackupDataOutput mBackupDataOutput;
-    @Mock private UserBackupManagerService mBackupManagerService;
+    @Mock
+    private BackupDataInput mBackupDataInput;
+    @Mock
+    private BackupDataOutput mBackupDataOutput;
+    @Mock
+    private UserBackupManagerService mBackupManagerService;
+    @Mock
+    private TransportConnection mTransportConnection;
 
     private Set<String> mExcludedkeys = new HashSet<>();
     private Map<String, String> mBackupData = new HashMap<>();
@@ -74,12 +92,20 @@
     private Set<String> mBackupDataDump;
     private PerformUnifiedRestoreTask mRestoreTask;
 
+    @Rule
+    public TestableDeviceConfig.TestableDeviceConfigRule
+            mDeviceConfigRule = new TestableDeviceConfig.TestableDeviceConfigRule();
+
+    private Context mContext;
+
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
 
         populateTestData();
 
+        mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+
         mBackupDataSource = new ArrayDeque<>(mBackupData.keySet());
         when(mBackupDataInput.readNextHeader()).then(new Answer<Boolean>() {
             @Override
@@ -106,7 +132,7 @@
                     }
                 });
 
-        mRestoreTask = new PerformUnifiedRestoreTask(mBackupManagerService);
+        mRestoreTask = new PerformUnifiedRestoreTask(mBackupManagerService, mTransportConnection);
     }
 
     private void populateTestData() {
@@ -179,4 +205,64 @@
 
         assertTrue(mRestoreTask.shouldStageBackupData(SYSTEM_PACKAGE_NAME));
     }
+
+    @Test
+    public void testFailedKeyValueRestore_continueAfterFeatureEnabled_nextStateIsRunningQueue()
+            throws TransportNotAvailableException, RemoteException {
+        DeviceConfig.setProperty(
+                "backup_and_restore",
+                "unified_restore_continue_after_transport_failure_in_kv_restore",
+                "true",
+                false);
+
+        setupForRestoreKeyValueState(BackupTransport.TRANSPORT_ERROR);
+
+        mRestoreTask.setCurrentUnifiedRestoreStateForTesting(UnifiedRestoreState.RESTORE_KEYVALUE);
+        mRestoreTask.setStateDirForTesting(mContext.getCacheDir());
+
+        PackageInfo testPackageInfo = new PackageInfo();
+        testPackageInfo.packageName = "test.package.name";
+        mRestoreTask.initiateOneRestoreForTesting(testPackageInfo, 0L);
+        assertTrue(
+                mRestoreTask.getCurrentUnifiedRestoreStateForTesting()
+                        == UnifiedRestoreState.RUNNING_QUEUE);
+    }
+
+    @Test
+    public void testFailedKeyValueRestore_continueAfterFeatureDisabled_nextStateIsFinal()
+            throws RemoteException, TransportNotAvailableException {
+        DeviceConfig.setProperty(
+                "backup_and_restore",
+                "unified_restore_continue_after_transport_failure_in_kv_restore",
+                "false",
+                false);
+
+        setupForRestoreKeyValueState(BackupTransport.TRANSPORT_ERROR);
+
+        mRestoreTask.setCurrentUnifiedRestoreStateForTesting(UnifiedRestoreState.RESTORE_KEYVALUE);
+        mRestoreTask.setStateDirForTesting(mContext.getCacheDir());
+
+        PackageInfo testPackageInfo = new PackageInfo();
+        testPackageInfo.packageName = "test.package.name";
+        mRestoreTask.initiateOneRestoreForTesting(testPackageInfo, 0L);
+        assertTrue(
+                mRestoreTask.getCurrentUnifiedRestoreStateForTesting()
+                        == UnifiedRestoreState.FINAL);
+    }
+
+    private void setupForRestoreKeyValueState(int transportStatus)
+            throws RemoteException, TransportNotAvailableException {
+        // Mock BackupHandler to do nothing when executeNextState() is called
+        BackupHandler backupHandler = Mockito.mock(BackupHandler.class);
+        when(backupHandler.obtainMessage(anyInt(), any())).thenReturn(new Message());
+        when(backupHandler.sendMessage(any())).thenReturn(true);
+
+        // Return cache directory for any bookkeeping or maintaining persistent state.
+        when(mBackupManagerService.getDataDir()).thenReturn(mContext.getCacheDir());
+        when(mBackupManagerService.getBackupHandler()).thenReturn(backupHandler);
+
+        BackupTransportClient transport = Mockito.mock(BackupTransportClient.class);
+        when(transport.getRestoreData(any())).thenReturn(transportStatus);
+        when(mTransportConnection.connectOrThrow(any())).thenReturn(transport);
+    }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java
index 45fefe4..c4aa0bb 100644
--- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java
+++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java
@@ -38,9 +38,7 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
-import android.content.ContentResolver;
 import android.content.Context;
-import android.content.ContextWrapper;
 import android.content.res.Resources;
 import android.hardware.Sensor;
 import android.hardware.SensorEventListener;
@@ -51,18 +49,18 @@
 import android.os.Looper;
 import android.os.PowerManager;
 import android.os.SystemProperties;
-import android.os.UserHandle;
 import android.os.test.TestLooper;
 import android.provider.Settings;
+import android.testing.TestableContext;
 import android.util.FloatProperty;
 import android.view.Display;
 import android.view.DisplayInfo;
 
-import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
+import androidx.test.platform.app.InstrumentationRegistry;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.server.ExtendedMockitoRule;
 import com.android.server.LocalServices;
 import com.android.server.am.BatteryStatsService;
 import com.android.server.display.RampAnimator.DualRampAnimator;
@@ -74,12 +72,12 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.Mock;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 import org.mockito.stubbing.Answer;
 
@@ -97,11 +95,9 @@
     private static final String SECOND_FOLLOWER_UNIQUE_DISPLAY_ID = "unique_id_789";
     private static final float PROX_SENSOR_MAX_RANGE = 5;
 
-    private MockitoSession mSession;
     private OffsettableClock mClock;
     private TestLooper mTestLooper;
     private Handler mHandler;
-    private Context mContextSpy;
     private DisplayPowerControllerHolder mHolder;
     private Sensor mProxSensor;
 
@@ -118,40 +114,44 @@
     @Mock
     private PowerManager mPowerManagerMock;
     @Mock
-    private Resources mResourcesMock;
-    @Mock
     private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock;
 
     @Captor
     private ArgumentCaptor<SensorEventListener> mSensorEventListenerCaptor;
 
+    @Rule
+    public final TestableContext mContext = new TestableContext(
+            InstrumentationRegistry.getInstrumentation().getContext());
+
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .setStrictness(Strictness.LENIENT)
+                    .spyStatic(SystemProperties.class)
+                    .spyStatic(BatteryStatsService.class)
+                    .build();
+
     @Before
     public void setUp() throws Exception {
-        mSession = ExtendedMockito.mockitoSession()
-                .initMocks(this)
-                .strictness(Strictness.LENIENT)
-                .spyStatic(SystemProperties.class)
-                .spyStatic(LocalServices.class)
-                .spyStatic(BatteryStatsService.class)
-                .spyStatic(Settings.System.class)
-                .startMocking();
-        mContextSpy = spy(new ContextWrapper(ApplicationProvider.getApplicationContext()));
         mClock = new OffsettableClock.Stopped();
         mTestLooper = new TestLooper(mClock::now);
         mHandler = new Handler(mTestLooper.getLooper());
-        addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock);
 
-        when(mContextSpy.getSystemService(eq(PowerManager.class))).thenReturn(mPowerManagerMock);
-        when(mContextSpy.getResources()).thenReturn(mResourcesMock);
+        // Put the system into manual brightness by default, just to minimize unexpected events and
+        // have a consistent starting state
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_MODE,
+                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
+
+        addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock);
+        addLocalServiceMock(ColorDisplayService.ColorDisplayServiceInternal.class,
+                mCdsiMock);
+
+        mContext.addMockSystemService(PowerManager.class, mPowerManagerMock);
 
         doAnswer((Answer<Void>) invocationOnMock -> null).when(() ->
                 SystemProperties.set(anyString(), any()));
-        doAnswer((Answer<ColorDisplayService.ColorDisplayServiceInternal>) invocationOnMock ->
-                mCdsiMock).when(() -> LocalServices.getService(
-                ColorDisplayService.ColorDisplayServiceInternal.class));
         doAnswer((Answer<Void>) invocationOnMock -> null).when(BatteryStatsService::getService);
-        doAnswer((Answer<Boolean>) invocationOnMock -> true).when(() ->
-                Settings.System.putFloatForUser(any(), any(), anyFloat(), anyInt()));
 
         setUpSensors();
         mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
@@ -159,8 +159,8 @@
 
     @After
     public void tearDown() {
-        mSession.finishMocking();
         LocalServices.removeServiceForTest(WindowManagerPolicy.class);
+        LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class);
     }
 
     @Test
@@ -421,11 +421,9 @@
 
     @Test
     public void testDisplayBrightnessFollowers_AutomaticBrightness() {
-        doAnswer((Answer<Integer>) invocationOnMock ->
-                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
-                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
-                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
-                        eq(UserHandle.USER_CURRENT)));
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_MODE,
+                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
         final float brightness = 0.4f;
         final float nits = 300;
         final float ambientLux = 3000;
@@ -436,7 +434,7 @@
         when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
         when(mHolder.automaticBrightnessController.getAmbientLux()).thenReturn(ambientLux);
         when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
-        DisplayPowerController followerDpc = mock(DisplayPowerController.class);
+        DisplayPowerController2 followerDpc = mock(DisplayPowerController2.class);
 
         mHolder.dpc.addDisplayBrightnessFollower(followerDpc);
         DisplayPowerRequest dpr = new DisplayPowerRequest();
@@ -447,7 +445,7 @@
     }
 
     @Test
-    public void testDisplayBrightnessFollowersRemoval() {
+    public void testDisplayBrightnessFollowersRemoval_RemoveSingleFollower() {
         DisplayPowerControllerHolder followerDpc = createDisplayPowerController(FOLLOWER_DISPLAY_ID,
                 FOLLOWER_UNIQUE_ID);
         DisplayPowerControllerHolder secondFollowerDpc = createDisplayPowerController(
@@ -522,6 +520,78 @@
     }
 
     @Test
+    public void testDisplayBrightnessFollowersRemoval_RemoveAllFollowers() {
+        DisplayPowerControllerHolder followerHolder =
+                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
+        DisplayPowerControllerHolder secondFollowerHolder =
+                createDisplayPowerController(SECOND_FOLLOWER_DISPLAY_ID,
+                        SECOND_FOLLOWER_UNIQUE_DISPLAY_ID);
+
+        DisplayPowerRequest dpr = new DisplayPowerRequest();
+        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
+        followerHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
+        secondFollowerHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
+        advanceTime(1); // Run updatePowerState
+
+        ArgumentCaptor<BrightnessSetting.BrightnessSettingListener> listenerCaptor =
+                ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class);
+        verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture());
+        BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue();
+
+        // Set the initial brightness on the DPCs we're going to remove so we have a fixed value for
+        // it to return to.
+        listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class);
+        verify(followerHolder.brightnessSetting).registerListener(listenerCaptor.capture());
+        BrightnessSetting.BrightnessSettingListener followerListener = listenerCaptor.getValue();
+        listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class);
+        verify(secondFollowerHolder.brightnessSetting).registerListener(listenerCaptor.capture());
+        BrightnessSetting.BrightnessSettingListener secondFollowerListener =
+                listenerCaptor.getValue();
+        final float initialFollowerBrightness = 0.3f;
+        when(followerHolder.brightnessSetting.getBrightness()).thenReturn(
+                initialFollowerBrightness);
+        when(secondFollowerHolder.brightnessSetting.getBrightness()).thenReturn(
+                initialFollowerBrightness);
+        followerListener.onBrightnessChanged(initialFollowerBrightness);
+        secondFollowerListener.onBrightnessChanged(initialFollowerBrightness);
+        advanceTime(1);
+        verify(followerHolder.animator).animateTo(eq(initialFollowerBrightness),
+                anyFloat(), anyFloat());
+        verify(secondFollowerHolder.animator).animateTo(eq(initialFollowerBrightness),
+                anyFloat(), anyFloat());
+
+        mHolder.dpc.addDisplayBrightnessFollower(followerHolder.dpc);
+        mHolder.dpc.addDisplayBrightnessFollower(secondFollowerHolder.dpc);
+        clearInvocations(followerHolder.animator, secondFollowerHolder.animator);
+
+        // Validate both followers are correctly registered and receiving brightness updates
+        float brightness = 0.6f;
+        float nits = 600;
+        when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
+        when(followerHolder.automaticBrightnessController.convertToFloatScale(nits))
+                .thenReturn(brightness);
+        when(secondFollowerHolder.automaticBrightnessController.convertToFloatScale(nits))
+                .thenReturn(brightness);
+        when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
+        listener.onBrightnessChanged(brightness);
+        advanceTime(1); // Send messages, run updatePowerState
+        verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat());
+        verify(followerHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat());
+        verify(secondFollowerHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat());
+
+        clearInvocations(mHolder.animator, followerHolder.animator, secondFollowerHolder.animator);
+
+        // Stop the lead DPC and validate that the followers go back to their original brightness.
+        mHolder.dpc.stop();
+        advanceTime(1);
+        verify(followerHolder.animator).animateTo(eq(initialFollowerBrightness),
+                anyFloat(), anyFloat());
+        verify(secondFollowerHolder.animator).animateTo(eq(initialFollowerBrightness),
+                anyFloat(), anyFloat());
+        clearInvocations(followerHolder.animator, secondFollowerHolder.animator);
+    }
+
+    @Test
     public void testDoesNotSetScreenStateForNonDefaultDisplayUntilBootCompleted() {
         // We should still set screen state for the default display
         DisplayPowerRequest dpr = new DisplayPowerRequest();
@@ -542,11 +612,9 @@
 
     @Test
     public void testSetScreenOffBrightnessSensorEnabled_DisplayIsOff() {
-        doAnswer((Answer<Integer>) invocationOnMock ->
-                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
-                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
-                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
-                        eq(UserHandle.USER_CURRENT)));
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_MODE,
+                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
 
         DisplayPowerRequest dpr = new DisplayPowerRequest();
         dpr.policy = DisplayPowerRequest.POLICY_OFF;
@@ -577,17 +645,14 @@
 
     @Test
     public void testSetScreenOffBrightnessSensorEnabled_DisplayIsInDoze() {
-        doAnswer((Answer<Integer>) invocationOnMock ->
-                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
-                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
-                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
-                        eq(UserHandle.USER_CURRENT)));
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_MODE,
+                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
 
         DisplayPowerRequest dpr = new DisplayPowerRequest();
         dpr.policy = DisplayPowerRequest.POLICY_DOZE;
-        when(mResourcesMock.getBoolean(
-                com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing))
-                .thenReturn(true);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing, true);
         mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
         advanceTime(1); // Run updatePowerState
 
@@ -615,12 +680,7 @@
 
     @Test
     public void testSetScreenOffBrightnessSensorDisabled_AutoBrightnessIsDisabled() {
-        doAnswer((Answer<Integer>) invocationOnMock ->
-                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL)
-                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
-                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
-                        eq(UserHandle.USER_CURRENT)));
-
+        // Tests are set up with manual brightness by default, so no need to set it here.
         DisplayPowerRequest dpr = new DisplayPowerRequest();
         dpr.policy = DisplayPowerRequest.POLICY_OFF;
         mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
@@ -632,11 +692,9 @@
 
     @Test
     public void testSetScreenOffBrightnessSensorDisabled_DisplayIsDisabled() {
-        doAnswer((Answer<Integer>) invocationOnMock ->
-                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
-                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
-                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
-                        eq(UserHandle.USER_CURRENT)));
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_MODE,
+                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
         mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID, /* isEnabled= */ false);
 
         DisplayPowerRequest dpr = new DisplayPowerRequest();
@@ -690,9 +748,9 @@
     public void testBrightnessNitsPersistWhenDisplayDeviceChanges() {
         float brightness = 0.3f;
         float nits = 500;
-        when(mResourcesMock.getBoolean(
-                com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay))
-                .thenReturn(true);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay,
+                true);
         mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
         when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
 
@@ -753,7 +811,7 @@
                 any(HysteresisLevels.class),
                 any(HysteresisLevels.class),
                 any(HysteresisLevels.class),
-                eq(mContextSpy),
+                eq(mContext),
                 any(HighBrightnessModeController.class),
                 any(BrightnessThrottler.class),
                 isNull(),
@@ -862,7 +920,7 @@
         setUpDisplay(displayId, uniqueId, display, device, config, isEnabled);
 
         final DisplayPowerController2 dpc = new DisplayPowerController2(
-                mContextSpy, injector, mDisplayPowerCallbacksMock, mHandler,
+                mContext, injector, mDisplayPowerCallbacksMock, mHandler,
                 mSensorManagerMock, mDisplayBlankerMock, display,
                 mBrightnessTrackerMock, brightnessSetting, () -> {},
                 hbmMetadata, /* bootCompleted= */ false);
diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java
index d9133a4..415adbb 100644
--- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java
@@ -38,9 +38,7 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
-import android.content.ContentResolver;
 import android.content.Context;
-import android.content.ContextWrapper;
 import android.content.res.Resources;
 import android.hardware.Sensor;
 import android.hardware.SensorEventListener;
@@ -51,18 +49,18 @@
 import android.os.Looper;
 import android.os.PowerManager;
 import android.os.SystemProperties;
-import android.os.UserHandle;
 import android.os.test.TestLooper;
 import android.provider.Settings;
+import android.testing.TestableContext;
 import android.util.FloatProperty;
 import android.view.Display;
 import android.view.DisplayInfo;
 
-import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
+import androidx.test.platform.app.InstrumentationRegistry;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.server.ExtendedMockitoRule;
 import com.android.server.LocalServices;
 import com.android.server.am.BatteryStatsService;
 import com.android.server.display.RampAnimator.DualRampAnimator;
@@ -75,12 +73,12 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.Mock;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 import org.mockito.stubbing.Answer;
 
@@ -93,16 +91,14 @@
     private static final int DISPLAY_ID = Display.DEFAULT_DISPLAY;
     private static final String UNIQUE_ID = "unique_id_test123";
     private static final int FOLLOWER_DISPLAY_ID = DISPLAY_ID + 1;
-    private static final String FOLLOWER_UNIQUE_DISPLAY_ID = "unique_id_456";
+    private static final String FOLLOWER_UNIQUE_ID = "unique_id_456";
     private static final int SECOND_FOLLOWER_DISPLAY_ID = FOLLOWER_DISPLAY_ID + 1;
     private static final String SECOND_FOLLOWER_UNIQUE_DISPLAY_ID = "unique_id_789";
     private static final float PROX_SENSOR_MAX_RANGE = 5;
 
-    private MockitoSession mSession;
     private OffsettableClock mClock;
     private TestLooper mTestLooper;
     private Handler mHandler;
-    private Context mContextSpy;
     private DisplayPowerControllerHolder mHolder;
     private Sensor mProxSensor;
 
@@ -119,41 +115,45 @@
     @Mock
     private PowerManager mPowerManagerMock;
     @Mock
-    private Resources mResourcesMock;
-    @Mock
     private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock;
 
     @Captor
     private ArgumentCaptor<SensorEventListener> mSensorEventListenerCaptor;
 
+    @Rule
+    public final TestableContext mContext = new TestableContext(
+            InstrumentationRegistry.getInstrumentation().getContext());
+
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .setStrictness(Strictness.LENIENT)
+                    .spyStatic(SystemProperties.class)
+                    .spyStatic(BatteryStatsService.class)
+                    .build();
+
     @Before
     public void setUp() throws Exception {
-        mSession = ExtendedMockito.mockitoSession()
-                .initMocks(this)
-                .strictness(Strictness.LENIENT)
-                .spyStatic(SystemProperties.class)
-                .spyStatic(LocalServices.class)
-                .spyStatic(BatteryStatsService.class)
-                .spyStatic(Settings.System.class)
-                .startMocking();
-        mContextSpy = spy(new ContextWrapper(ApplicationProvider.getApplicationContext()));
         mClock = new OffsettableClock.Stopped();
         mTestLooper = new TestLooper(mClock::now);
         mHandler = new Handler(mTestLooper.getLooper());
 
-        addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock);
+        // Put the system into manual brightness by default, just to minimize unexpected events and
+        // have a consistent starting state
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_MODE,
+                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
 
-        when(mContextSpy.getSystemService(eq(PowerManager.class))).thenReturn(mPowerManagerMock);
-        when(mContextSpy.getResources()).thenReturn(mResourcesMock);
+
+        addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock);
+        addLocalServiceMock(ColorDisplayService.ColorDisplayServiceInternal.class,
+                mCdsiMock);
+
+        mContext.addMockSystemService(PowerManager.class, mPowerManagerMock);
 
         doAnswer((Answer<Void>) invocationOnMock -> null).when(() ->
                 SystemProperties.set(anyString(), any()));
-        doAnswer((Answer<ColorDisplayService.ColorDisplayServiceInternal>) invocationOnMock ->
-                mCdsiMock).when(() -> LocalServices.getService(
-                ColorDisplayService.ColorDisplayServiceInternal.class));
         doAnswer((Answer<Void>) invocationOnMock -> null).when(BatteryStatsService::getService);
-        doAnswer((Answer<Boolean>) invocationOnMock -> true).when(() ->
-                Settings.System.putFloatForUser(any(), any(), anyFloat(), anyInt()));
 
         setUpSensors();
         mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
@@ -161,8 +161,8 @@
 
     @After
     public void tearDown() {
-        mSession.finishMocking();
         LocalServices.removeServiceForTest(WindowManagerPolicy.class);
+        LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class);
     }
 
     @Test
@@ -279,7 +279,7 @@
     @Test
     public void testProximitySensorListenerNotRegisteredForNonDefaultDisplay() {
         DisplayPowerControllerHolder followerDpc =
-                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID);
+                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
 
         when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON);
         // send a display power request
@@ -298,7 +298,7 @@
     @Test
     public void testDisplayBrightnessFollowers_BothDpcsSupportNits() {
         DisplayPowerControllerHolder followerDpc =
-                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID);
+                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
 
         DisplayPowerRequest dpr = new DisplayPowerRequest();
         mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
@@ -344,7 +344,7 @@
     @Test
     public void testDisplayBrightnessFollowers_FollowerDoesNotSupportNits() {
         DisplayPowerControllerHolder followerDpc =
-                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID);
+                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
 
         DisplayPowerRequest dpr = new DisplayPowerRequest();
         mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
@@ -372,7 +372,7 @@
     @Test
     public void testDisplayBrightnessFollowers_LeadDpcDoesNotSupportNits() {
         DisplayPowerControllerHolder followerDpc =
-                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID);
+                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
 
         DisplayPowerRequest dpr = new DisplayPowerRequest();
         mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
@@ -398,7 +398,7 @@
     @Test
     public void testDisplayBrightnessFollowers_NeitherDpcSupportsNits() {
         DisplayPowerControllerHolder followerDpc =
-                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID);
+                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
 
         DisplayPowerRequest dpr = new DisplayPowerRequest();
         mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
@@ -425,11 +425,9 @@
 
     @Test
     public void testDisplayBrightnessFollowers_AutomaticBrightness() {
-        doAnswer((Answer<Integer>) invocationOnMock ->
-                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
-                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
-                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
-                        eq(UserHandle.USER_CURRENT)));
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_MODE,
+                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
         final float brightness = 0.4f;
         final float nits = 300;
         final float ambientLux = 3000;
@@ -451,9 +449,9 @@
     }
 
     @Test
-    public void testDisplayBrightnessFollowersRemoval() {
+    public void testDisplayBrightnessFollowersRemoval_RemoveSingleFollower() {
         DisplayPowerControllerHolder followerHolder =
-                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID);
+                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
         DisplayPowerControllerHolder secondFollowerHolder =
                 createDisplayPowerController(SECOND_FOLLOWER_DISPLAY_ID,
                         SECOND_FOLLOWER_UNIQUE_DISPLAY_ID);
@@ -527,6 +525,78 @@
     }
 
     @Test
+    public void testDisplayBrightnessFollowersRemoval_RemoveAllFollowers() {
+        DisplayPowerControllerHolder followerHolder =
+                createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
+        DisplayPowerControllerHolder secondFollowerHolder =
+                createDisplayPowerController(SECOND_FOLLOWER_DISPLAY_ID,
+                        SECOND_FOLLOWER_UNIQUE_DISPLAY_ID);
+
+        DisplayPowerRequest dpr = new DisplayPowerRequest();
+        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
+        followerHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
+        secondFollowerHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
+        advanceTime(1); // Run updatePowerState
+
+        ArgumentCaptor<BrightnessSetting.BrightnessSettingListener> listenerCaptor =
+                ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class);
+        verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture());
+        BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue();
+
+        // Set the initial brightness on the DPCs we're going to remove so we have a fixed value for
+        // it to return to.
+        listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class);
+        verify(followerHolder.brightnessSetting).registerListener(listenerCaptor.capture());
+        BrightnessSetting.BrightnessSettingListener followerListener = listenerCaptor.getValue();
+        listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class);
+        verify(secondFollowerHolder.brightnessSetting).registerListener(listenerCaptor.capture());
+        BrightnessSetting.BrightnessSettingListener secondFollowerListener =
+                listenerCaptor.getValue();
+        final float initialFollowerBrightness = 0.3f;
+        when(followerHolder.brightnessSetting.getBrightness()).thenReturn(
+                initialFollowerBrightness);
+        when(secondFollowerHolder.brightnessSetting.getBrightness()).thenReturn(
+                initialFollowerBrightness);
+        followerListener.onBrightnessChanged(initialFollowerBrightness);
+        secondFollowerListener.onBrightnessChanged(initialFollowerBrightness);
+        advanceTime(1);
+        verify(followerHolder.animator).animateTo(eq(initialFollowerBrightness),
+                anyFloat(), anyFloat());
+        verify(secondFollowerHolder.animator).animateTo(eq(initialFollowerBrightness),
+                anyFloat(), anyFloat());
+
+        mHolder.dpc.addDisplayBrightnessFollower(followerHolder.dpc);
+        mHolder.dpc.addDisplayBrightnessFollower(secondFollowerHolder.dpc);
+        clearInvocations(followerHolder.animator, secondFollowerHolder.animator);
+
+        // Validate both followers are correctly registered and receiving brightness updates
+        float brightness = 0.6f;
+        float nits = 600;
+        when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
+        when(followerHolder.automaticBrightnessController.convertToFloatScale(nits))
+                .thenReturn(brightness);
+        when(secondFollowerHolder.automaticBrightnessController.convertToFloatScale(nits))
+                .thenReturn(brightness);
+        when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness);
+        listener.onBrightnessChanged(brightness);
+        advanceTime(1); // Send messages, run updatePowerState
+        verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat());
+        verify(followerHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat());
+        verify(secondFollowerHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat());
+
+        clearInvocations(mHolder.animator, followerHolder.animator, secondFollowerHolder.animator);
+
+        // Stop the lead DPC and validate that the followers go back to their original brightness.
+        mHolder.dpc.stop();
+        advanceTime(1);
+        verify(followerHolder.animator).animateTo(eq(initialFollowerBrightness),
+                anyFloat(), anyFloat());
+        verify(secondFollowerHolder.animator).animateTo(eq(initialFollowerBrightness),
+                anyFloat(), anyFloat());
+        clearInvocations(followerHolder.animator, secondFollowerHolder.animator);
+    }
+
+    @Test
     public void testDoesNotSetScreenStateForNonDefaultDisplayUntilBootCompleted() {
         // We should still set screen state for the default display
         DisplayPowerRequest dpr = new DisplayPowerRequest();
@@ -547,11 +617,9 @@
 
     @Test
     public void testSetScreenOffBrightnessSensorEnabled_DisplayIsOff() {
-        doAnswer((Answer<Integer>) invocationOnMock ->
-                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
-                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
-                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
-                        eq(UserHandle.USER_CURRENT)));
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_MODE,
+                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
 
         DisplayPowerRequest dpr = new DisplayPowerRequest();
         dpr.policy = DisplayPowerRequest.POLICY_OFF;
@@ -582,17 +650,14 @@
 
     @Test
     public void testSetScreenOffBrightnessSensorEnabled_DisplayIsInDoze() {
-        doAnswer((Answer<Integer>) invocationOnMock ->
-                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
-                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
-                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
-                        eq(UserHandle.USER_CURRENT)));
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_MODE,
+                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
 
         DisplayPowerRequest dpr = new DisplayPowerRequest();
         dpr.policy = DisplayPowerRequest.POLICY_DOZE;
-        when(mResourcesMock.getBoolean(
-                com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing))
-                .thenReturn(true);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing, true);
         mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
         advanceTime(1); // Run updatePowerState
 
@@ -620,12 +685,7 @@
 
     @Test
     public void testSetScreenOffBrightnessSensorDisabled_AutoBrightnessIsDisabled() {
-        doAnswer((Answer<Integer>) invocationOnMock ->
-                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL)
-                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
-                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
-                        eq(UserHandle.USER_CURRENT)));
-
+        // Tests are set up with manual brightness by default, so no need to set it here.
         DisplayPowerRequest dpr = new DisplayPowerRequest();
         dpr.policy = DisplayPowerRequest.POLICY_OFF;
         mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
@@ -637,11 +697,10 @@
 
     @Test
     public void testSetScreenOffBrightnessSensorDisabled_DisplayIsDisabled() {
-        doAnswer((Answer<Integer>) invocationOnMock ->
-                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
-                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
-                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
-                        eq(UserHandle.USER_CURRENT)));
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_MODE,
+                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
+
         mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID, /* isEnabled= */ false);
 
         DisplayPowerRequest dpr = new DisplayPowerRequest();
@@ -695,9 +754,10 @@
     public void testBrightnessNitsPersistWhenDisplayDeviceChanges() {
         float brightness = 0.3f;
         float nits = 500;
-        when(mResourcesMock.getBoolean(
-                com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay))
-                .thenReturn(true);
+        mContext.getOrCreateTestableResources().addOverride(
+                com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay,
+                true);
+
         mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
         when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
 
@@ -758,7 +818,7 @@
                 any(HysteresisLevels.class),
                 any(HysteresisLevels.class),
                 any(HysteresisLevels.class),
-                eq(mContextSpy),
+                eq(mContext),
                 any(HighBrightnessModeController.class),
                 any(BrightnessThrottler.class),
                 isNull(),
@@ -866,7 +926,7 @@
         setUpDisplay(displayId, uniqueId, display, device, config, isEnabled);
 
         final DisplayPowerController dpc = new DisplayPowerController(
-                mContextSpy, injector, mDisplayPowerCallbacksMock, mHandler,
+                mContext, injector, mDisplayPowerCallbacksMock, mHandler,
                 mSensorManagerMock, mDisplayBlankerMock, display,
                 mBrightnessTrackerMock, brightnessSetting, () -> {},
                 hbmMetadata, /* bootCompleted= */ false);
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/RefreshRateSettingsUtilsTest.java b/services/tests/mockingservicestests/src/com/android/server/display/RefreshRateSettingsUtilsTest.java
new file mode 100644
index 0000000..17fba9f
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/display/RefreshRateSettingsUtilsTest.java
@@ -0,0 +1,121 @@
+/*
+ * 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 com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.when;
+
+import android.hardware.display.DisplayManager;
+import android.provider.Settings;
+import android.testing.TestableContext;
+import android.view.Display;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.internal.display.RefreshRateSettingsUtils;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class RefreshRateSettingsUtilsTest {
+
+    @Rule
+    public final TestableContext mContext = new TestableContext(
+            InstrumentationRegistry.getInstrumentation().getContext());
+
+    @Mock
+    private DisplayManager mDisplayManagerMock;
+    @Mock
+    private Display mDisplayMock;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mContext.addMockSystemService(DisplayManager.class, mDisplayManagerMock);
+
+        Display.Mode[] modes = new Display.Mode[] {
+                new Display.Mode(/* modeId= */ 0, /* width= */ 800, /* height= */ 600,
+                        /* refreshRate= */ 60),
+                new Display.Mode(/* modeId= */ 0, /* width= */ 800, /* height= */ 600,
+                        /* refreshRate= */ 120),
+                new Display.Mode(/* modeId= */ 0, /* width= */ 800, /* height= */ 600,
+                        /* refreshRate= */ 90)
+        };
+
+        when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(mDisplayMock);
+        when(mDisplayMock.getSupportedModes()).thenReturn(modes);
+    }
+
+    @Test
+    public void testFindHighestRefreshRateForDefaultDisplay() {
+        when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(null);
+        assertEquals(DEFAULT_REFRESH_RATE,
+                RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext),
+                /* delta= */ 0);
+
+        when(mDisplayManagerMock.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(mDisplayMock);
+        assertEquals(120,
+                RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext),
+                /* delta= */ 0);
+    }
+
+    @Test
+    public void testGetMinRefreshRate() {
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.FORCE_PEAK_REFRESH_RATE, -1);
+        assertEquals(0, RefreshRateSettingsUtils.getMinRefreshRate(mContext), /* delta= */ 0);
+
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.FORCE_PEAK_REFRESH_RATE, 0);
+        assertEquals(0, RefreshRateSettingsUtils.getMinRefreshRate(mContext), /* delta= */ 0);
+
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.FORCE_PEAK_REFRESH_RATE, 1);
+        assertEquals(120, RefreshRateSettingsUtils.getMinRefreshRate(mContext), /* delta= */ 0);
+    }
+
+    @Test
+    public void testGetPeakRefreshRate() {
+        float defaultPeakRefreshRate = 100;
+
+        Settings.System.putInt(mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY, -1);
+        assertEquals(defaultPeakRefreshRate,
+                RefreshRateSettingsUtils.getPeakRefreshRate(mContext, defaultPeakRefreshRate),
+                /* delta= */ 0);
+
+        Settings.System.putInt(mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY, 0);
+        assertEquals(DEFAULT_REFRESH_RATE,
+                RefreshRateSettingsUtils.getPeakRefreshRate(mContext, defaultPeakRefreshRate),
+                /* delta= */ 0);
+
+        Settings.System.putInt(mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY, 1);
+        assertEquals(120,
+                RefreshRateSettingsUtils.getPeakRefreshRate(mContext, defaultPeakRefreshRate),
+                /* delta= */ 0);
+    }
+}
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/JobNotificationCoordinatorTest.java b/services/tests/mockingservicestests/src/com/android/server/job/JobNotificationCoordinatorTest.java
index df2f59a..e24354f 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/JobNotificationCoordinatorTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/JobNotificationCoordinatorTest.java
@@ -149,7 +149,8 @@
                 .enqueueNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid), eq(pid), any(),
                         eq(notificationId), eq(notification), eq(UserHandle.getUserId(uid)));
 
-        coordinator.removeNotificationAssociation(jsc, JobParameters.STOP_REASON_UNDEFINED);
+        coordinator.removeNotificationAssociation(jsc, JobParameters.STOP_REASON_UNDEFINED,
+                jsc.getRunningJobLocked());
         verify(mNotificationManagerInternal, never())
                 .cancelNotification(anyString(), anyString(), anyInt(), anyInt(), any(),
                         anyInt(), anyInt());
@@ -170,7 +171,8 @@
                 .enqueueNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid), eq(pid), any(),
                         eq(notificationId), eq(notification), eq(UserHandle.getUserId(uid)));
 
-        coordinator.removeNotificationAssociation(jsc, JobParameters.STOP_REASON_UNDEFINED);
+        coordinator.removeNotificationAssociation(jsc, JobParameters.STOP_REASON_UNDEFINED,
+                jsc.getRunningJobLocked());
         verify(mNotificationManagerInternal)
                 .cancelNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid), eq(pid), any(),
                         eq(notificationId), eq(UserHandle.getUserId(uid)));
@@ -292,7 +294,8 @@
                         eq(notificationId2), eq(notification2), eq(UserHandle.getUserId(uid)));
 
         // Remove the first job. Only the first notification should be removed.
-        coordinator.removeNotificationAssociation(jsc1, JobParameters.STOP_REASON_UNDEFINED);
+        coordinator.removeNotificationAssociation(jsc1, JobParameters.STOP_REASON_UNDEFINED,
+                jsc1.getRunningJobLocked());
         inOrder.verify(mNotificationManagerInternal)
                 .cancelNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid), eq(pid), any(),
                         eq(notificationId1), eq(UserHandle.getUserId(uid)));
@@ -300,7 +303,8 @@
                 .cancelNotification(anyString(), anyString(), anyInt(), anyInt(), any(),
                         eq(notificationId2), anyInt());
 
-        coordinator.removeNotificationAssociation(jsc2, JobParameters.STOP_REASON_UNDEFINED);
+        coordinator.removeNotificationAssociation(jsc2, JobParameters.STOP_REASON_UNDEFINED,
+                jsc2.getRunningJobLocked());
         inOrder.verify(mNotificationManagerInternal)
                 .cancelNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid), eq(pid), any(),
                         eq(notificationId2), eq(UserHandle.getUserId(uid)));
@@ -335,12 +339,14 @@
                         eq(notificationId), eq(notification2), eq(UserHandle.getUserId(uid)));
 
         // Remove the first job. The notification shouldn't be touched because of the 2nd job.
-        coordinator.removeNotificationAssociation(jsc1, JobParameters.STOP_REASON_UNDEFINED);
+        coordinator.removeNotificationAssociation(jsc1, JobParameters.STOP_REASON_UNDEFINED,
+                jsc1.getRunningJobLocked());
         inOrder.verify(mNotificationManagerInternal, never())
                 .cancelNotification(anyString(), anyString(), anyInt(), anyInt(), any(),
                         anyInt(), anyInt());
 
-        coordinator.removeNotificationAssociation(jsc2, JobParameters.STOP_REASON_UNDEFINED);
+        coordinator.removeNotificationAssociation(jsc2, JobParameters.STOP_REASON_UNDEFINED,
+                jsc2.getRunningJobLocked());
         inOrder.verify(mNotificationManagerInternal)
                 .cancelNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid), eq(pid), any(),
                         eq(notificationId), eq(UserHandle.getUserId(uid)));
@@ -376,7 +382,8 @@
                         eq(notificationId), eq(notification2), eq(UserHandle.getUserId(uid2)));
 
         // Remove the first job. Only the first notification should be removed.
-        coordinator.removeNotificationAssociation(jsc1, JobParameters.STOP_REASON_UNDEFINED);
+        coordinator.removeNotificationAssociation(jsc1, JobParameters.STOP_REASON_UNDEFINED,
+                jsc1.getRunningJobLocked());
         inOrder.verify(mNotificationManagerInternal)
                 .cancelNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid1), eq(pid), any(),
                         eq(notificationId), eq(UserHandle.getUserId(uid1)));
@@ -384,7 +391,8 @@
                 .cancelNotification(anyString(), anyString(), eq(uid2), anyInt(), any(),
                         anyInt(), anyInt());
 
-        coordinator.removeNotificationAssociation(jsc2, JobParameters.STOP_REASON_UNDEFINED);
+        coordinator.removeNotificationAssociation(jsc2, JobParameters.STOP_REASON_UNDEFINED,
+                jsc2.getRunningJobLocked());
         inOrder.verify(mNotificationManagerInternal)
                 .cancelNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid2), eq(pid), any(),
                         eq(notificationId), eq(UserHandle.getUserId(uid2)));
@@ -421,7 +429,8 @@
                         eq(notificationId), eq(notification2), eq(UserHandle.getUserId(uid)));
 
         // Remove the first job. Only the first notification should be removed.
-        coordinator.removeNotificationAssociation(jsc1, JobParameters.STOP_REASON_UNDEFINED);
+        coordinator.removeNotificationAssociation(jsc1, JobParameters.STOP_REASON_UNDEFINED,
+                jsc1.getRunningJobLocked());
         inOrder.verify(mNotificationManagerInternal)
                 .cancelNotification(eq(pkg1), eq(pkg1), eq(uid), eq(pid), any(),
                         eq(notificationId), eq(UserHandle.getUserId(uid)));
@@ -429,7 +438,8 @@
                 .cancelNotification(anyString(), anyString(), eq(uid), anyInt(), any(),
                         anyInt(), anyInt());
 
-        coordinator.removeNotificationAssociation(jsc2, JobParameters.STOP_REASON_UNDEFINED);
+        coordinator.removeNotificationAssociation(jsc2, JobParameters.STOP_REASON_UNDEFINED,
+                jsc2.getRunningJobLocked());
         inOrder.verify(mNotificationManagerInternal)
                 .cancelNotification(eq(pkg2), eq(pkg2), eq(uid), eq(pid), any(),
                         eq(notificationId), eq(UserHandle.getUserId(uid)));
@@ -450,7 +460,8 @@
                 .enqueueNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid), eq(pid), any(),
                         eq(notificationId), eq(notification), eq(UserHandle.getUserId(uid)));
 
-        coordinator.removeNotificationAssociation(jsc, JobParameters.STOP_REASON_USER);
+        coordinator.removeNotificationAssociation(jsc, JobParameters.STOP_REASON_USER,
+                jsc.getRunningJobLocked());
         verify(mNotificationManagerInternal)
                 .cancelNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid), eq(pid), any(),
                         eq(notificationId), eq(UserHandle.getUserId(uid)));
@@ -485,12 +496,14 @@
                         eq(notificationId), eq(notification2), eq(UserHandle.getUserId(uid)));
 
         // Remove the first job. The notification shouldn't be touched because of the 2nd job.
-        coordinator.removeNotificationAssociation(jsc1, JobParameters.STOP_REASON_USER);
+        coordinator.removeNotificationAssociation(jsc1, JobParameters.STOP_REASON_USER,
+                jsc1.getRunningJobLocked());
         inOrder.verify(mNotificationManagerInternal, never())
                 .cancelNotification(anyString(), anyString(), anyInt(), anyInt(), any(),
                         anyInt(), anyInt());
 
-        coordinator.removeNotificationAssociation(jsc2, JobParameters.STOP_REASON_USER);
+        coordinator.removeNotificationAssociation(jsc2, JobParameters.STOP_REASON_USER,
+                jsc2.getRunningJobLocked());
         inOrder.verify(mNotificationManagerInternal)
                 .cancelNotification(eq(TEST_PACKAGE), eq(TEST_PACKAGE), eq(uid), eq(pid), any(),
                         eq(notificationId), eq(UserHandle.getUserId(uid)));
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/job/restrictions/ThermalStatusRestrictionTest.java b/services/tests/mockingservicestests/src/com/android/server/job/restrictions/ThermalStatusRestrictionTest.java
index 02fdfad..754f409 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/restrictions/ThermalStatusRestrictionTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/restrictions/ThermalStatusRestrictionTest.java
@@ -276,9 +276,9 @@
         assertFalse(mThermalStatusRestriction.isJobRestricted(ejRunning));
         assertTrue(mThermalStatusRestriction.isJobRestricted(ejRunningLong));
         assertFalse(mThermalStatusRestriction.isJobRestricted(ui));
-        assertTrue(mThermalStatusRestriction.isJobRestricted(uiRetried));
+        assertFalse(mThermalStatusRestriction.isJobRestricted(uiRetried));
         assertFalse(mThermalStatusRestriction.isJobRestricted(uiRunning));
-        assertTrue(mThermalStatusRestriction.isJobRestricted(uiRunningLong));
+        assertFalse(mThermalStatusRestriction.isJobRestricted(uiRunningLong));
 
         mStatusChangedListener.onThermalStatusChanged(THERMAL_STATUS_SEVERE);
 
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
new file mode 100644
index 0000000..35d4ffd
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/rollback/RollbackPackageHealthObserverTest.java
@@ -0,0 +1,303 @@
+/*
+ * 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.rollback;
+
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
+
+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;
+import android.content.rollback.RollbackManager;
+import android.util.Log;
+import android.util.Xml;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.server.PackageWatchdog;
+import com.android.server.SystemConfig;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoSession;
+import org.mockito.quality.Strictness;
+import org.mockito.stubbing.Answer;
+import org.xmlpull.v1.XmlPullParser;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.List;
+import java.util.Scanner;
+
+
+@RunWith(AndroidJUnit4.class)
+public class RollbackPackageHealthObserverTest {
+    @Mock
+    private Context mMockContext;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private PackageWatchdog mMockPackageWatchdog;
+    @Mock
+    RollbackManager mRollbackManager;
+    @Mock
+    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";
+
+    private SystemConfig mSysConfig;
+
+    @Rule public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+
+    @Before
+    public void setup() {
+        mSysConfig = new SystemConfigTestClass();
+
+        mSession = ExtendedMockito.mockitoSession()
+                .initMocks(this)
+                .strictness(Strictness.LENIENT)
+                .spyStatic(PackageWatchdog.class)
+                .startMocking();
+
+        // Mock PackageWatchdog
+        doAnswer((Answer<PackageWatchdog>) invocationOnMock -> mMockPackageWatchdog)
+                .when(() -> PackageWatchdog.getInstance(mMockContext));
+
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        mSession.finishMocking();
+    }
+
+    /**
+     * Subclass of SystemConfig without running the constructor.
+     */
+    private class SystemConfigTestClass extends SystemConfig {
+        SystemConfigTestClass() {
+            super(false);
+        }
+    }
+
+    @Test
+    public void testHealthCheckLevels() {
+        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);
+
+        // Crashes with no rollbacks available
+        assertEquals(PackageWatchdog.PackageHealthObserverImpact.USER_IMPACT_LEVEL_0,
+                observer.onHealthCheckFailed(null,
+                        PackageWatchdog.FAILURE_REASON_NATIVE_CRASH, 1));
+        assertEquals(PackageWatchdog.PackageHealthObserverImpact.USER_IMPACT_LEVEL_0,
+                observer.onHealthCheckFailed(null,
+                        PackageWatchdog.FAILURE_REASON_APP_CRASH, 1));
+
+        // Make the rollbacks available
+        when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of(mRollbackInfo));
+        when(mRollbackInfo.getPackages()).thenReturn(List.of(mPackageRollbackInfo));
+        when(mPackageRollbackInfo.getVersionRolledBackFrom()).thenReturn(testFailedPackage);
+
+        // native crash
+        assertEquals(PackageWatchdog.PackageHealthObserverImpact.USER_IMPACT_LEVEL_30,
+                observer.onHealthCheckFailed(null,
+                        PackageWatchdog.FAILURE_REASON_NATIVE_CRASH, 1));
+        // non-native crash for the package
+        assertEquals(PackageWatchdog.PackageHealthObserverImpact.USER_IMPACT_LEVEL_60,
+                observer.onHealthCheckFailed(testFailedPackage,
+                        PackageWatchdog.FAILURE_REASON_APP_CRASH, 1));
+        // non-native crash for a different package
+        assertEquals(PackageWatchdog.PackageHealthObserverImpact.USER_IMPACT_LEVEL_70,
+                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());
+        assertEquals(PackageWatchdog.PackageHealthObserverImpact.USER_IMPACT_LEVEL_0,
+                observer.onHealthCheckFailed(testFailedPackage,
+                        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.
+     */
+    @Test
+    public void isRollbackAllowedTest_false() throws IOException {
+        final String contents =
+                "<config>\n"
+                + "    <automatic-rollback-denylisted-app package=\"com.android.vending\" />\n"
+                + "</config>";
+        final File folder = createTempSubfolder("folder");
+        createTempFile(folder, "automatic-rollback-denylisted-app.xml", contents);
+
+        readPermissions(folder, /* Grant all permission flags */ ~0);
+
+        assertThat(RollbackPackageHealthObserver.isAutomaticRollbackDenied(mSysConfig,
+                new VersionedPackage("com.test.package", 1))).isEqualTo(false);
+    }
+
+    /**
+     * Test that isAutomaticRollbackDenied works correctly when packages that are
+     * denied are sent.
+     */
+    @Test
+    public void isRollbackAllowedTest_true() throws IOException {
+        final String contents =
+                "<config>\n"
+                + "    <automatic-rollback-denylisted-app package=\"com.android.vending\" />\n"
+                + "</config>";
+        final File folder = createTempSubfolder("folder");
+        createTempFile(folder, "automatic-rollback-denylisted-app.xml", contents);
+
+        readPermissions(folder, /* Grant all permission flags */ ~0);
+
+        assertThat(RollbackPackageHealthObserver.isAutomaticRollbackDenied(mSysConfig,
+                new VersionedPackage("com.android.vending", 1))).isEqualTo(true);
+    }
+
+    /**
+     * Test that isAutomaticRollbackDenied works correctly when no config is present
+     */
+    @Test
+    public void isRollbackAllowedTest_noConfig() throws IOException {
+        final File folder = createTempSubfolder("folder");
+
+        readPermissions(folder, /* Grant all permission flags */ ~0);
+
+        assertThat(RollbackPackageHealthObserver.isAutomaticRollbackDenied(mSysConfig,
+                new VersionedPackage("com.android.vending", 1))).isEqualTo(false);
+    }
+
+    /**
+     * Creates folderName/fileName in the mTemporaryFolder and fills it with the contents.
+     *
+     * @param folder   pre-existing subdirectory of mTemporaryFolder to put the file
+     * @param fileName name of the file (e.g. filename.xml) to create
+     * @param contents contents to write to the file
+     * @return the newly created file
+     */
+    private File createTempFile(File folder, String fileName, String contents)
+            throws IOException {
+        File file = new File(folder, fileName);
+        BufferedWriter bw = new BufferedWriter(new FileWriter(file));
+        bw.write(contents);
+        bw.close();
+
+        // Print to logcat for test debugging.
+        Log.d(LOG_TAG, "Contents of file " + file.getAbsolutePath());
+        Scanner input = new Scanner(file);
+        while (input.hasNextLine()) {
+            Log.d(LOG_TAG, input.nextLine());
+        }
+
+        return file;
+    }
+
+    private void readPermissions(File libraryDir, int permissionFlag) {
+        final XmlPullParser parser = Xml.newPullParser();
+        mSysConfig.readPermissions(parser, libraryDir, permissionFlag);
+    }
+
+    /**
+     * Creates folderName/fileName in the mTemporaryFolder and fills it with the contents.
+     *
+     * @param folderName subdirectory of mTemporaryFolder to put the file, creating if needed
+     * @return the folder
+     */
+    private File createTempSubfolder(String folderName)
+            throws IOException {
+        File folder = new File(mTemporaryFolder.getRoot(), folderName);
+        folder.mkdirs();
+        return folder;
+    }
+}
diff --git a/services/tests/servicestests/res/xml/irq_device_map_3.xml b/services/tests/servicestests/res/xml/irq_device_map_3.xml
index 1d2a7d3..fd55428 100644
--- a/services/tests/servicestests/res/xml/irq_device_map_3.xml
+++ b/services/tests/servicestests/res/xml/irq_device_map_3.xml
@@ -23,4 +23,13 @@
     <device name="test.wifi.device">
         <subsystem>Wifi</subsystem>
     </device>
+    <device name="test.sound_trigger.device">
+        <subsystem>Sound_trigger</subsystem>
+    </device>
+    <device name="test.cellular_data.device">
+        <subsystem>Cellular_data</subsystem>
+    </device>
+    <device name="test.sensor.device">
+        <subsystem>Sensor</subsystem>
+    </device>
 </irq-device-map>
\ No newline at end of file
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/FullScreenMagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java
index f1ad577..a01c7bd 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java
@@ -200,7 +200,7 @@
         assertFalse(mFullScreenMagnificationController.isRegistered(DISPLAY_0));
         assertFalse(mFullScreenMagnificationController.isRegistered(DISPLAY_1));
 
-        verify(mMockThumbnail, times(2)).hideThumbNail();
+        verify(mMockThumbnail, times(2)).hideThumbnail();
     }
 
     @Test
@@ -538,7 +538,10 @@
                 mConfigCaptor.capture());
         assertConfigEquals(config, mConfigCaptor.getValue());
 
-        verify(mMockThumbnail).setThumbNailBounds(any(), anyFloat(), anyFloat(), anyFloat());
+        // The first time is triggered when the thumbnail is just created.
+        // The second time is triggered when the magnification region changed.
+        verify(mMockThumbnail, times(2)).setThumbnailBounds(
+                any(), anyFloat(), anyFloat(), anyFloat());
     }
 
     @Test
@@ -909,7 +912,7 @@
         verifyNoMoreInteractions(mMockWindowManager);
 
         verify(mMockThumbnail)
-                .updateThumbNail(eq(scale), eq(startCenter.x), eq(startCenter.y));
+                .updateThumbnail(eq(scale), eq(startCenter.x), eq(startCenter.y));
     }
 
     @Test
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/accessibility/magnification/MagnificationThumbnailTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationThumbnailTest.java
index 60c8148..3baa102 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationThumbnailTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationThumbnailTest.java
@@ -66,14 +66,14 @@
 
     @Test
     public void updateThumbnailShows() {
-        runOnMainSync(() -> mMagnificationThumbnail.updateThumbNail(
+        runOnMainSync(() -> mMagnificationThumbnail.updateThumbnail(
                 /* scale=   */ 2f,
                 /* centerX= */ 5,
                 /* centerY= */ 10
         ));
         idle();
 
-        runOnMainSync(() -> mMagnificationThumbnail.updateThumbNail(
+        runOnMainSync(() -> mMagnificationThumbnail.updateThumbnail(
                 /* scale=   */ 2.2f,
                 /* centerX= */ 15,
                 /* centerY= */ 50
@@ -86,7 +86,7 @@
 
     @Test
     public void updateThumbnailLingersThenHidesAfterTimeout() throws InterruptedException {
-        runOnMainSync(() -> mMagnificationThumbnail.updateThumbNail(
+        runOnMainSync(() -> mMagnificationThumbnail.updateThumbnail(
                 /* scale=   */ 2f,
                 /* centerX= */ 5,
                 /* centerY= */ 10
@@ -103,14 +103,14 @@
 
     @Test
     public void hideThumbnailRemoves() throws InterruptedException {
-        runOnMainSync(() -> mMagnificationThumbnail.updateThumbNail(
+        runOnMainSync(() -> mMagnificationThumbnail.updateThumbnail(
                 /* scale=   */ 2f,
                 /* centerX= */ 5,
                 /* centerY= */ 10
         ));
         idle();
 
-        runOnMainSync(() -> mMagnificationThumbnail.hideThumbNail());
+        runOnMainSync(() -> mMagnificationThumbnail.hideThumbnail());
         idle();
 
         // Wait for the fade out animation
@@ -122,10 +122,10 @@
 
     @Test
     public void hideShowHideShowHideRemoves() throws InterruptedException {
-        runOnMainSync(() -> mMagnificationThumbnail.hideThumbNail());
+        runOnMainSync(() -> mMagnificationThumbnail.hideThumbnail());
         idle();
 
-        runOnMainSync(() -> mMagnificationThumbnail.updateThumbNail(
+        runOnMainSync(() -> mMagnificationThumbnail.updateThumbnail(
                 /* scale=   */ 2f,
                 /* centerX= */ 5,
                 /* centerY= */ 10
@@ -135,17 +135,17 @@
         // Wait for the fade in animation
         Thread.sleep(200L);
 
-        runOnMainSync(() -> mMagnificationThumbnail.hideThumbNail());
+        runOnMainSync(() -> mMagnificationThumbnail.hideThumbnail());
         idle();
 
-        runOnMainSync(() -> mMagnificationThumbnail.updateThumbNail(
+        runOnMainSync(() -> mMagnificationThumbnail.updateThumbnail(
                 /* scale=   */ 2f,
                 /* centerX= */ 5,
                 /* centerY= */ 10
         ));
         idle();
 
-        runOnMainSync(() -> mMagnificationThumbnail.hideThumbNail());
+        runOnMainSync(() -> mMagnificationThumbnail.hideThumbnail());
         idle();
 
 
@@ -158,7 +158,7 @@
 
     @Test
     public void hideWithoutShowDoesNothing() throws InterruptedException {
-        runOnMainSync(() -> mMagnificationThumbnail.hideThumbNail());
+        runOnMainSync(() -> mMagnificationThumbnail.hideThumbnail());
         idle();
 
         // Wait for the fade out animation
@@ -172,7 +172,7 @@
 
     @Test
     public void whenHidden_setBoundsDoesNotShow() throws InterruptedException {
-        runOnMainSync(() -> mMagnificationThumbnail.setThumbNailBounds(
+        runOnMainSync(() -> mMagnificationThumbnail.setThumbnailBounds(
                 new Rect(),
                 /* scale=   */ 2f,
                 /* centerX= */ 5,
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/am/UserControllerTest.java b/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
index ab8f3f2..d12741a 100644
--- a/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
@@ -211,8 +211,7 @@
     @Test
     public void testStartUser_foreground() {
         mUserController.startUser(TEST_USER_ID, USER_START_MODE_FOREGROUND);
-        verify(mInjector.getWindowManager()).startFreezingScreen(anyInt(), anyInt());
-        verify(mInjector.getWindowManager(), never()).stopFreezingScreen();
+        verify(mInjector, never()).dismissUserSwitchingDialog(any());
         verify(mInjector.getWindowManager(), times(1)).setSwitchingUser(anyBoolean());
         verify(mInjector.getWindowManager()).setSwitchingUser(true);
         verify(mInjector).clearAllLockedTasks(anyString());
@@ -224,7 +223,8 @@
     public void testStartUser_background() {
         boolean started = mUserController.startUser(TEST_USER_ID, USER_START_MODE_BACKGROUND);
         assertWithMessage("startUser(%s, foreground=false)", TEST_USER_ID).that(started).isTrue();
-        verify(mInjector.getWindowManager(), never()).startFreezingScreen(anyInt(), anyInt());
+        verify(mInjector, never()).showUserSwitchingDialog(
+                any(), any(), anyString(), anyString(), any());
         verify(mInjector.getWindowManager(), never()).setSwitchingUser(anyBoolean());
         verify(mInjector, never()).clearAllLockedTasks(anyString());
         startBackgroundUserAssertions();
@@ -276,7 +276,8 @@
         assertWithMessage("startUserOnDisplay(%s, %s)", TEST_USER_ID, 42).that(started).isTrue();
         verifyUserAssignedToDisplay(TEST_USER_ID, 42);
 
-        verify(mInjector.getWindowManager(), never()).startFreezingScreen(anyInt(), anyInt());
+        verify(mInjector, never()).showUserSwitchingDialog(
+                any(), any(), anyString(), anyString(), any());
         verify(mInjector.getWindowManager(), never()).setSwitchingUser(anyBoolean());
         verify(mInjector, never()).clearAllLockedTasks(anyString());
         startBackgroundUserAssertions();
@@ -288,8 +289,9 @@
                 /* maxRunningUsers= */ 3, /* delayUserDataLocking= */ false);
 
         mUserController.startUser(TEST_USER_ID, USER_START_MODE_FOREGROUND);
-        verify(mInjector.getWindowManager(), never()).startFreezingScreen(anyInt(), anyInt());
-        verify(mInjector.getWindowManager(), never()).stopFreezingScreen();
+        verify(mInjector, never()).showUserSwitchingDialog(
+                any(), any(), anyString(), anyString(), any());
+        verify(mInjector, never()).dismissUserSwitchingDialog(any());
         verify(mInjector.getWindowManager(), never()).setSwitchingUser(anyBoolean());
         startForegroundUserAssertions();
     }
@@ -310,7 +312,8 @@
         // Make sure no intents have been fired for pre-created users.
         assertTrue(mInjector.mSentIntents.isEmpty());
 
-        verify(mInjector.getWindowManager(), never()).startFreezingScreen(anyInt(), anyInt());
+        verify(mInjector, never()).showUserSwitchingDialog(
+                any(), any(), anyString(), anyString(), any());
         verify(mInjector.getWindowManager(), never()).setSwitchingUser(anyBoolean());
         verify(mInjector, never()).clearAllLockedTasks(anyString());
 
@@ -442,7 +445,7 @@
         // Verify that continueUserSwitch worked as expected
         continueAndCompleteUserSwitch(userState, oldUserId, newUserId);
         verify(mInjector, times(0)).dismissKeyguard(any());
-        verify(mInjector.getWindowManager(), times(1)).stopFreezingScreen();
+        verify(mInjector, times(1)).dismissUserSwitchingDialog(any());
         continueUserSwitchAssertions(oldUserId, TEST_USER_ID, false);
         verifySystemUserVisibilityChangesNeverNotified();
     }
@@ -463,7 +466,7 @@
         // Verify that continueUserSwitch worked as expected
         continueAndCompleteUserSwitch(userState, oldUserId, newUserId);
         verify(mInjector, times(1)).dismissKeyguard(any());
-        verify(mInjector.getWindowManager(), times(1)).stopFreezingScreen();
+        verify(mInjector, times(1)).dismissUserSwitchingDialog(any());
         continueUserSwitchAssertions(oldUserId, TEST_USER_ID, false);
         verifySystemUserVisibilityChangesNeverNotified();
     }
@@ -483,7 +486,7 @@
         mInjector.mHandler.clearAllRecordedMessages();
         // Verify that continueUserSwitch worked as expected
         continueAndCompleteUserSwitch(userState, oldUserId, newUserId);
-        verify(mInjector.getWindowManager(), never()).stopFreezingScreen();
+        verify(mInjector, never()).dismissUserSwitchingDialog(any());
         continueUserSwitchAssertions(oldUserId, TEST_USER_ID, false);
     }
 
@@ -985,8 +988,7 @@
         mInjector.mHandler.clearAllRecordedMessages();
         // Verify that continueUserSwitch worked as expected
         continueAndCompleteUserSwitch(userState, oldUserId, newUserId);
-        verify(mInjector.getWindowManager(), times(expectedNumberOfCalls))
-                .stopFreezingScreen();
+        verify(mInjector, times(expectedNumberOfCalls)).dismissUserSwitchingDialog(any());
         continueUserSwitchAssertions(oldUserId, newUserId, expectOldUserStopping);
     }
 
@@ -1189,6 +1191,22 @@
         }
 
         @Override
+        void showUserSwitchingDialog(UserInfo fromUser, UserInfo toUser,
+                String switchingFromSystemUserMessage, String switchingToSystemUserMessage,
+                Runnable onShown) {
+            if (onShown != null) {
+                onShown.run();
+            }
+        }
+
+        @Override
+        void dismissUserSwitchingDialog(Runnable onDismissed) {
+            if (onDismissed != null) {
+                onDismissed.run();
+            }
+        }
+
+        @Override
         protected LockPatternUtils getLockPatternUtils() {
             return mLockPatternUtilsMock;
         }
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/FaceAuthenticationClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClientTest.java
index 7468901..d5d06d3 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClientTest.java
@@ -16,6 +16,8 @@
 
 package com.android.server.biometrics.sensors.face.aidl;
 
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_LOCKOUT;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_LOCKOUT_PERMANENT;
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
@@ -148,6 +150,28 @@
     }
 
     @Test
+    public void testLockoutEndsOperation() throws RemoteException {
+        final FaceAuthenticationClient client = createClient(2);
+        client.start(mCallback);
+        client.onLockoutPermanent();
+
+        verify(mClientMonitorCallbackConverter).onError(anyInt(), anyInt(),
+                eq(FACE_ERROR_LOCKOUT_PERMANENT), anyInt());
+        verify(mCallback).onClientFinished(client, false);
+    }
+
+    @Test
+    public void testTemporaryLockoutEndsOperation() throws RemoteException {
+        final FaceAuthenticationClient client = createClient(2);
+        client.start(mCallback);
+        client.onLockoutTimed(1000);
+
+        verify(mClientMonitorCallbackConverter).onError(anyInt(), anyInt(),
+                eq(FACE_ERROR_LOCKOUT), anyInt());
+        verify(mCallback).onClientFinished(client, false);
+    }
+
+    @Test
     public void notifyHalWhenContextChanges() throws RemoteException {
         final FaceAuthenticationClient client = createClient();
         client.start(mCallback);
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..bacf256
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncConnectionServiceTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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(
+                new CallMetadataSyncConnectionService.PhoneAccountHandleIdentifier(/*
+                associationId= */
+                        0, "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(
+                new CallMetadataSyncConnectionService.PhoneAccountHandleIdentifier(/*
+                associationId= */
+                        0, "com.google.test"), "Test App");
+        final PhoneAccount phoneAccount2 = mSyncConnectionService.createPhoneAccount(
+                new CallMetadataSyncConnectionService.PhoneAccountHandleIdentifier(/*
+                associationId= */
+                        0, "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/datatransfer/contextsync/CallMetadataSyncDataTest.java b/services/tests/servicestests/src/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncDataTest.java
new file mode 100644
index 0000000..c5a9af7
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncDataTest.java
@@ -0,0 +1,64 @@
+/*
+ * 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.assertThat;
+
+import android.os.Parcel;
+import android.testing.AndroidTestingRunner;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidTestingRunner.class)
+public class CallMetadataSyncDataTest {
+
+    @Test
+    public void call_writeToParcel_fromParcel_reconstructsSuccessfully() {
+        final CallMetadataSyncData.Call call = new CallMetadataSyncData.Call();
+        final long id = 5;
+        final String callerId = "callerId";
+        final byte[] appIcon = "appIcon".getBytes();
+        final String appName = "appName";
+        final String appIdentifier = "com.google.test";
+        final int status = 1;
+        final int control1 = 2;
+        final int control2 = 3;
+        call.setId(id);
+        call.setCallerId(callerId);
+        call.setAppIcon(appIcon);
+        call.setAppName(appName);
+        call.setAppIdentifier(appIdentifier);
+        call.setStatus(status);
+        call.addControl(control1);
+        call.addControl(control2);
+
+        Parcel parcel = Parcel.obtain();
+        call.writeToParcel(parcel, /* flags= */ 0);
+        parcel.setDataPosition(0);
+        final CallMetadataSyncData.Call reconstructedCall = CallMetadataSyncData.Call.fromParcel(
+                parcel);
+
+        assertThat(reconstructedCall.getId()).isEqualTo(id);
+        assertThat(reconstructedCall.getCallerId()).isEqualTo(callerId);
+        assertThat(reconstructedCall.getAppIcon()).isEqualTo(appIcon);
+        assertThat(reconstructedCall.getAppName()).isEqualTo(appName);
+        assertThat(reconstructedCall.getAppIdentifier()).isEqualTo(appIdentifier);
+        assertThat(reconstructedCall.getStatus()).isEqualTo(status);
+        assertThat(reconstructedCall.getControls()).containsExactly(control1, control2);
+    }
+}
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/companion/virtual/VirtualDeviceManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
index a4a3e36..c8c1d6f 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java
@@ -1160,6 +1160,7 @@
         final int fd = 1;
         final int keyCode = KeyEvent.KEYCODE_A;
         final int action = VirtualKeyEvent.ACTION_UP;
+        final long eventTimeNanos = 5000L;
         mInputController.addDeviceForTesting(BINDER, fd,
                 InputController.InputDeviceDescriptor.TYPE_KEYBOARD, DISPLAY_ID_1, PHYS,
                 DEVICE_NAME_1, INPUT_DEVICE_ID);
@@ -1167,8 +1168,9 @@
         mDeviceImpl.sendKeyEvent(BINDER, new VirtualKeyEvent.Builder()
                 .setKeyCode(keyCode)
                 .setAction(action)
+                .setEventTimeNanos(eventTimeNanos)
                 .build());
-        verify(mNativeWrapperMock).writeKeyEvent(fd, keyCode, action);
+        verify(mNativeWrapperMock).writeKeyEvent(fd, keyCode, action, eventTimeNanos);
     }
 
     @Test
@@ -1188,14 +1190,17 @@
         final int fd = 1;
         final int buttonCode = VirtualMouseButtonEvent.BUTTON_BACK;
         final int action = VirtualMouseButtonEvent.ACTION_BUTTON_PRESS;
+        final long eventTimeNanos = 5000L;
         mInputController.addDeviceForTesting(BINDER, fd,
                 InputController.InputDeviceDescriptor.TYPE_MOUSE, DISPLAY_ID_1, PHYS,
                 DEVICE_NAME_1, INPUT_DEVICE_ID);
         doReturn(DISPLAY_ID_1).when(mInputManagerInternalMock).getVirtualMousePointerDisplayId();
         mDeviceImpl.sendButtonEvent(BINDER, new VirtualMouseButtonEvent.Builder()
                 .setButtonCode(buttonCode)
-                .setAction(action).build());
-        verify(mNativeWrapperMock).writeButtonEvent(fd, buttonCode, action);
+                .setAction(action)
+                .setEventTimeNanos(eventTimeNanos)
+                .build());
+        verify(mNativeWrapperMock).writeButtonEvent(fd, buttonCode, action, eventTimeNanos);
     }
 
     @Test
@@ -1229,13 +1234,17 @@
         final int fd = 1;
         final float x = -0.2f;
         final float y = 0.7f;
+        final long eventTimeNanos = 5000L;
         mInputController.addDeviceForTesting(BINDER, fd,
                 InputController.InputDeviceDescriptor.TYPE_MOUSE, DISPLAY_ID_1, PHYS, DEVICE_NAME_1,
                 INPUT_DEVICE_ID);
         doReturn(DISPLAY_ID_1).when(mInputManagerInternalMock).getVirtualMousePointerDisplayId();
         mDeviceImpl.sendRelativeEvent(BINDER, new VirtualMouseRelativeEvent.Builder()
-                .setRelativeX(x).setRelativeY(y).build());
-        verify(mNativeWrapperMock).writeRelativeEvent(fd, x, y);
+                .setRelativeX(x)
+                .setRelativeY(y)
+                .setEventTimeNanos(eventTimeNanos)
+                .build());
+        verify(mNativeWrapperMock).writeRelativeEvent(fd, x, y, eventTimeNanos);
     }
 
     @Test
@@ -1270,14 +1279,17 @@
         final int fd = 1;
         final float x = 0.5f;
         final float y = 1f;
+        final long eventTimeNanos = 5000L;
         mInputController.addDeviceForTesting(BINDER, fd,
                 InputController.InputDeviceDescriptor.TYPE_MOUSE, DISPLAY_ID_1, PHYS, DEVICE_NAME_1,
                 INPUT_DEVICE_ID);
         doReturn(DISPLAY_ID_1).when(mInputManagerInternalMock).getVirtualMousePointerDisplayId();
         mDeviceImpl.sendScrollEvent(BINDER, new VirtualMouseScrollEvent.Builder()
                 .setXAxisMovement(x)
-                .setYAxisMovement(y).build());
-        verify(mNativeWrapperMock).writeScrollEvent(fd, x, y);
+                .setYAxisMovement(y)
+                .setEventTimeNanos(eventTimeNanos)
+                .build());
+        verify(mNativeWrapperMock).writeScrollEvent(fd, x, y, eventTimeNanos);
     }
 
     @Test
@@ -1318,6 +1330,7 @@
         final float x = 100.5f;
         final float y = 200.5f;
         final int action = VirtualTouchEvent.ACTION_UP;
+        final long eventTimeNanos = 5000L;
         mInputController.addDeviceForTesting(BINDER, fd,
                 InputController.InputDeviceDescriptor.TYPE_TOUCHSCREEN, DISPLAY_ID_1, PHYS,
                 DEVICE_NAME_1, INPUT_DEVICE_ID);
@@ -1327,9 +1340,10 @@
                 .setAction(action)
                 .setPointerId(pointerId)
                 .setToolType(toolType)
+                .setEventTimeNanos(eventTimeNanos)
                 .build());
         verify(mNativeWrapperMock).writeTouchEvent(fd, pointerId, toolType, action, x, y, Float.NaN,
-                Float.NaN);
+                Float.NaN, eventTimeNanos);
     }
 
     @Test
@@ -1342,6 +1356,7 @@
         final int action = VirtualTouchEvent.ACTION_UP;
         final float pressure = 1.0f;
         final float majorAxisSize = 10.0f;
+        final long eventTimeNanos = 5000L;
         mInputController.addDeviceForTesting(BINDER, fd,
                 InputController.InputDeviceDescriptor.TYPE_TOUCHSCREEN, DISPLAY_ID_1, PHYS,
                 DEVICE_NAME_1, INPUT_DEVICE_ID);
@@ -1353,9 +1368,10 @@
                 .setToolType(toolType)
                 .setPressure(pressure)
                 .setMajorAxisSize(majorAxisSize)
+                .setEventTimeNanos(eventTimeNanos)
                 .build());
         verify(mNativeWrapperMock).writeTouchEvent(fd, pointerId, toolType, action, x, y, pressure,
-                majorAxisSize);
+                majorAxisSize, eventTimeNanos);
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java
index 120ddf6..b539a76 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java
@@ -86,6 +86,7 @@
 
     // Test setting default restrictions for managed profile.
     @Test
+    @Ignore("b/277916462")
     public void testMigration_managedProfileOwner() throws Exception {
         // Create a managed profile user.
         final File user10dir = getServices().addUser(10, 0,
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
index dd81abe..d85db64b 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -1368,6 +1368,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testClearDeviceOwner() throws Exception {
         mContext.callerPermissions.add(permission.MANAGE_DEVICE_ADMINS);
         mContext.callerPermissions.add(permission.MANAGE_USERS);
@@ -1955,6 +1956,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testSetUserRestriction_asDo() throws Exception {
         mContext.callerPermissions.add(permission.MANAGE_DEVICE_ADMINS);
         mContext.callerPermissions.add(permission.MANAGE_USERS);
@@ -2123,6 +2125,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testSetUserRestriction_asPo() {
         setAsProfileOwner(admin1);
 
@@ -2259,6 +2262,7 @@
             );
 
     @Test
+    @Ignore("b/277916462")
     public void testSetUserRestriction_asPoOfOrgOwnedDevice() throws Exception {
         final int MANAGED_PROFILE_ADMIN_UID =
                 UserHandle.getUid(CALLER_USER_HANDLE, DpmMockContext.SYSTEM_UID);
@@ -2334,6 +2338,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testNoDefaultEnabledUserRestrictions() throws Exception {
         mContext.callerPermissions.add(permission.MANAGE_DEVICE_ADMINS);
         mContext.callerPermissions.add(permission.MANAGE_USERS);
@@ -2925,6 +2930,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testCreateAdminSupportIntent() throws Exception {
         // Setup device owner.
         mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
@@ -3261,31 +3267,31 @@
         reset(getServices().settings);
 
         dpm.setMaximumTimeToLock(admin1, 0);
-        verifyScreenTimeoutCall(null, UserHandle.USER_SYSTEM);
+        verifyScreenTimeoutCall(null, CALLER_USER_HANDLE);
         verifyStayOnWhilePluggedCleared(false);
         reset(getServices().powerManagerInternal);
         reset(getServices().settings);
 
         dpm.setMaximumTimeToLock(admin1, 1);
-        verifyScreenTimeoutCall(1L, UserHandle.USER_SYSTEM);
+        verifyScreenTimeoutCall(1L, CALLER_USER_HANDLE);
         verifyStayOnWhilePluggedCleared(true);
         reset(getServices().powerManagerInternal);
         reset(getServices().settings);
 
         dpm.setMaximumTimeToLock(admin2, 10);
-        verifyScreenTimeoutCall(null, UserHandle.USER_SYSTEM);
+        verifyScreenTimeoutCall(null, CALLER_USER_HANDLE);
         verifyStayOnWhilePluggedCleared(false);
         reset(getServices().powerManagerInternal);
         reset(getServices().settings);
 
         dpm.setMaximumTimeToLock(admin1, 5);
-        verifyScreenTimeoutCall(5L, UserHandle.USER_SYSTEM);
+        verifyScreenTimeoutCall(5L, CALLER_USER_HANDLE);
         verifyStayOnWhilePluggedCleared(true);
         reset(getServices().powerManagerInternal);
         reset(getServices().settings);
 
         dpm.setMaximumTimeToLock(admin2, 4);
-        verifyScreenTimeoutCall(4L, UserHandle.USER_SYSTEM);
+        verifyScreenTimeoutCall(4L, CALLER_USER_HANDLE);
         verifyStayOnWhilePluggedCleared(true);
         reset(getServices().powerManagerInternal);
         reset(getServices().settings);
@@ -3295,20 +3301,20 @@
         reset(getServices().settings);
 
         dpm.setMaximumTimeToLock(admin2, Long.MAX_VALUE);
-        verifyScreenTimeoutCall(Long.MAX_VALUE, UserHandle.USER_SYSTEM);
+        verifyScreenTimeoutCall(Long.MAX_VALUE, CALLER_USER_HANDLE);
         verifyStayOnWhilePluggedCleared(true);
         reset(getServices().powerManagerInternal);
         reset(getServices().settings);
 
         dpm.setMaximumTimeToLock(admin2, 10);
-        verifyScreenTimeoutCall(10L, UserHandle.USER_SYSTEM);
+        verifyScreenTimeoutCall(10L, CALLER_USER_HANDLE);
         verifyStayOnWhilePluggedCleared(true);
         reset(getServices().powerManagerInternal);
         reset(getServices().settings);
 
         // There's no restriction; should be set to MAX.
         dpm.setMaximumTimeToLock(admin2, 0);
-        verifyScreenTimeoutCall(Long.MAX_VALUE, UserHandle.USER_SYSTEM);
+        verifyScreenTimeoutCall(Long.MAX_VALUE, CALLER_USER_HANDLE);
         verifyStayOnWhilePluggedCleared(false);
     }
 
@@ -4993,6 +4999,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testWipeDataManagedProfileOnOrganizationOwnedDevice() throws Exception {
         setupProfileOwner();
         configureProfileOwnerOfOrgOwnedDevice(admin1, CALLER_USER_HANDLE);
@@ -7023,6 +7030,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testSetUserControlDisabledPackages_asDO() throws Exception {
         final List<String> testPackages = new ArrayList<>();
         testPackages.add("package_1");
@@ -7038,6 +7046,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testSetUserControlDisabledPackages_asPO() {
         final List<String> testPackages = new ArrayList<>();
         testPackages.add("package_1");
@@ -7776,6 +7785,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testSetUserRestriction_financeDo_validRestrictions_setsRestriction()
             throws Exception {
         setDeviceOwner();
@@ -7858,6 +7868,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testSetUninstallBlocked_financeDo_success() throws Exception {
         String packageName = "com.android.foo.package";
         setDeviceOwner();
@@ -7871,6 +7882,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testSetUserControlDisabledPackages_financeDo_success() throws Exception {
         List<String> packages = new ArrayList<>();
         packages.add("com.android.foo.package");
@@ -7960,6 +7972,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testAddPersistentPreferredActivity_financeDo_success() throws Exception {
         IntentFilter filter = new IntentFilter();
         ComponentName target = new ComponentName(admin2.getPackageName(), "test.class");
@@ -7975,6 +7988,7 @@
     }
 
     @Test
+    @Ignore("b/277916462")
     public void testClearPackagePersistentPreferredActvities_financeDo_success() throws Exception {
         String packageName = admin2.getPackageName();
         setDeviceOwner();
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/display/BrightnessMappingStrategyTest.java b/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java
index 89ff2c2..5f81869 100644
--- a/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java
@@ -287,25 +287,37 @@
             adjustedNits50p[i] = DISPLAY_RANGE_NITS[i] * 0.5f;
         }
 
-        // Default is unadjusted
+        // Default
         assertEquals(DISPLAY_RANGE_NITS[0], strategy.convertToNits(BACKLIGHT_RANGE_ZERO_TO_ONE[0]),
-                0.0001f /* tolerance */);
+                TOLERANCE);
         assertEquals(DISPLAY_RANGE_NITS[1], strategy.convertToNits(BACKLIGHT_RANGE_ZERO_TO_ONE[1]),
-                0.0001f /* tolerance */);
+                TOLERANCE);
+        assertEquals(DISPLAY_RANGE_NITS[0],
+                strategy.convertToAdjustedNits(BACKLIGHT_RANGE_ZERO_TO_ONE[0]), TOLERANCE);
+        assertEquals(DISPLAY_RANGE_NITS[1],
+                strategy.convertToAdjustedNits(BACKLIGHT_RANGE_ZERO_TO_ONE[1]), TOLERANCE);
 
-        // When adjustment is turned on, adjustment array is used
+        // Adjustment is turned on
         strategy.recalculateSplines(true, adjustedNits50p);
+        assertEquals(DISPLAY_RANGE_NITS[0], strategy.convertToNits(BACKLIGHT_RANGE_ZERO_TO_ONE[0]),
+                TOLERANCE);
+        assertEquals(DISPLAY_RANGE_NITS[1], strategy.convertToNits(BACKLIGHT_RANGE_ZERO_TO_ONE[1]),
+                TOLERANCE);
         assertEquals(DISPLAY_RANGE_NITS[0] / 2,
-                strategy.convertToNits(BACKLIGHT_RANGE_ZERO_TO_ONE[0]), 0.0001f /* tolerance */);
+                strategy.convertToAdjustedNits(BACKLIGHT_RANGE_ZERO_TO_ONE[0]), TOLERANCE);
         assertEquals(DISPLAY_RANGE_NITS[1] / 2,
-                strategy.convertToNits(BACKLIGHT_RANGE_ZERO_TO_ONE[1]), 0.0001f /* tolerance */);
+                strategy.convertToAdjustedNits(BACKLIGHT_RANGE_ZERO_TO_ONE[1]), TOLERANCE);
 
-        // When adjustment is turned off, adjustment array is ignored
+        // Adjustment is turned off
         strategy.recalculateSplines(false, adjustedNits50p);
         assertEquals(DISPLAY_RANGE_NITS[0], strategy.convertToNits(BACKLIGHT_RANGE_ZERO_TO_ONE[0]),
-                0.0001f /* tolerance */);
+                TOLERANCE);
         assertEquals(DISPLAY_RANGE_NITS[1], strategy.convertToNits(BACKLIGHT_RANGE_ZERO_TO_ONE[1]),
-                0.0001f /* tolerance */);
+                TOLERANCE);
+        assertEquals(DISPLAY_RANGE_NITS[0],
+                strategy.convertToAdjustedNits(BACKLIGHT_RANGE_ZERO_TO_ONE[0]), TOLERANCE);
+        assertEquals(DISPLAY_RANGE_NITS[1],
+                strategy.convertToAdjustedNits(BACKLIGHT_RANGE_ZERO_TO_ONE[1]), TOLERANCE);
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java b/services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java
index ff89be7..5ea3029 100644
--- a/services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java
@@ -17,6 +17,8 @@
 package com.android.server.display;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
@@ -26,6 +28,7 @@
 
 import android.app.PropertyInvalidatedCache;
 import android.graphics.Point;
+import android.util.SparseArray;
 import android.view.Display;
 import android.view.DisplayInfo;
 import android.view.Surface;
@@ -47,6 +50,7 @@
     private static final int LAYER_STACK = 0;
     private static final int DISPLAY_WIDTH = 100;
     private static final int DISPLAY_HEIGHT = 200;
+    private static final int MODE_ID = 1;
 
     private LogicalDisplay mLogicalDisplay;
     private DisplayDevice mDisplayDevice;
@@ -65,6 +69,9 @@
         mDisplayDeviceInfo.height = DISPLAY_HEIGHT;
         mDisplayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
         mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_INTERNAL;
+        mDisplayDeviceInfo.modeId = MODE_ID;
+        mDisplayDeviceInfo.supportedModes = new Display.Mode[] {new Display.Mode(MODE_ID,
+                DISPLAY_WIDTH, DISPLAY_HEIGHT, /* refreshRate= */ 60)};
         when(mDisplayDevice.getDisplayDeviceInfoLocked()).thenReturn(mDisplayDeviceInfo);
 
         // Disable binder caches in this process.
@@ -168,14 +175,34 @@
     }
 
     @Test
-    public void testLayoutLimitedRefreshRateNotClearedAfterUpdate() {
-        SurfaceControl.RefreshRateRange refreshRateRange = new SurfaceControl.RefreshRateRange(1,
-                2);
-        mLogicalDisplay.updateLayoutLimitedRefreshRateLocked(refreshRateRange);
-        mLogicalDisplay.updateDisplayGroupIdLocked(1);
+    public void testUpdateLayoutLimitedRefreshRate() {
+        SurfaceControl.RefreshRateRange layoutLimitedRefreshRate =
+                new SurfaceControl.RefreshRateRange(0, 120);
+        DisplayInfo info1 = mLogicalDisplay.getDisplayInfoLocked();
+        mLogicalDisplay.updateLayoutLimitedRefreshRateLocked(layoutLimitedRefreshRate);
+        DisplayInfo info2 = mLogicalDisplay.getDisplayInfoLocked();
+        // Display info should only be updated when updateLocked is called
+        assertEquals(info2, info1);
 
-        DisplayInfo result = mLogicalDisplay.getDisplayInfoLocked();
+        mLogicalDisplay.updateLocked(mDeviceRepo);
+        DisplayInfo info3 = mLogicalDisplay.getDisplayInfoLocked();
+        assertNotEquals(info3, info2);
+        assertEquals(layoutLimitedRefreshRate, info3.layoutLimitedRefreshRate);
+    }
 
-        assertEquals(refreshRateRange, result.layoutLimitedRefreshRate);
+    @Test
+    public void testUpdateRefreshRateThermalThrottling() {
+        SparseArray<SurfaceControl.RefreshRateRange> refreshRanges = new SparseArray<>();
+        refreshRanges.put(0, new SurfaceControl.RefreshRateRange(0, 120));
+        DisplayInfo info1 = mLogicalDisplay.getDisplayInfoLocked();
+        mLogicalDisplay.updateThermalRefreshRateThrottling(refreshRanges);
+        DisplayInfo info2 = mLogicalDisplay.getDisplayInfoLocked();
+        // Display info should only be updated when updateLocked is called
+        assertEquals(info2, info1);
+
+        mLogicalDisplay.updateLocked(mDeviceRepo);
+        DisplayInfo info3 = mLogicalDisplay.getDisplayInfoLocked();
+        assertNotEquals(info3, info2);
+        assertTrue(refreshRanges.contentEquals(info3.thermalRefreshRateThrottling));
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
index cfb432a..d7b12e0 100644
--- a/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
@@ -279,20 +279,27 @@
 
     @Test
     public void testConvertToNits() {
-        float brightness = 0.5f;
-        float nits = 300;
+        final float brightness = 0.5f;
+        final float nits = 300;
+        final float adjustedNits = 200;
 
         // ABC is null
         assertEquals(-1f, mDisplayBrightnessController.convertToNits(brightness),
                 /* delta= */ 0);
+        assertEquals(-1f, mDisplayBrightnessController.convertToAdjustedNits(brightness),
+                /* delta= */ 0);
 
         AutomaticBrightnessController automaticBrightnessController =
                 mock(AutomaticBrightnessController.class);
         when(automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
+        when(automaticBrightnessController.convertToAdjustedNits(brightness))
+                .thenReturn(adjustedNits);
         mDisplayBrightnessController.setAutomaticBrightnessController(
                 automaticBrightnessController);
 
         assertEquals(nits, mDisplayBrightnessController.convertToNits(brightness), /* delta= */ 0);
+        assertEquals(adjustedNits, mDisplayBrightnessController.convertToAdjustedNits(brightness),
+                /* delta= */ 0);
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/display/mode/DisplayModeDirectorTest.java b/services/tests/servicestests/src/com/android/server/display/mode/DisplayModeDirectorTest.java
index 6907145..4cfcee5 100644
--- a/services/tests/servicestests/src/com/android/server/display/mode/DisplayModeDirectorTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/mode/DisplayModeDirectorTest.java
@@ -84,6 +84,7 @@
 
 import com.android.internal.R;
 import com.android.internal.display.BrightnessSynchronizer;
+import com.android.internal.display.RefreshRateSettingsUtils;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.Preconditions;
 import com.android.internal.util.test.FakeSettingsProvider;
@@ -126,7 +127,8 @@
     private static final String TAG = "DisplayModeDirectorTest";
     private static final boolean DEBUG = false;
     private static final float FLOAT_TOLERANCE = 0.01f;
-    private static final int DISPLAY_ID = 0;
+    private static final int DISPLAY_ID = Display.DEFAULT_DISPLAY;
+    private static final int MODE_ID = 1;
     private static final float TRANSITION_POINT = 0.763f;
 
     private static final float HBM_TRANSITION_POINT_INVALID = Float.POSITIVE_INFINITY;
@@ -158,6 +160,9 @@
         LocalServices.addService(SensorManagerInternal.class, mSensorManagerInternalMock);
         LocalServices.removeServiceForTest(DisplayManagerInternal.class);
         LocalServices.addService(DisplayManagerInternal.class, mDisplayManagerInternalMock);
+
+        clearSmoothDisplaySetting();
+        clearForcePeakRefreshRateSetting();
     }
 
     private DisplayModeDirector createDirectorFromRefreshRateArray(
@@ -919,7 +924,6 @@
     public void testLockFpsForLowZone() throws Exception {
         DisplayModeDirector director =
                 createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
-        setPeakRefreshRate(90);
         director.getSettingsObserver().setDefaultRefreshRate(90);
         director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
 
@@ -927,6 +931,7 @@
         config.setRefreshRateInLowZone(90);
         config.setLowDisplayBrightnessThresholds(new int[] { 10 });
         config.setLowAmbientBrightnessThresholds(new int[] { 20 });
+        config.setDefaultPeakRefreshRate(90);
 
         Sensor lightSensor = createLightSensor();
         SensorManager sensorManager = createMockSensorManager(lightSensor);
@@ -977,7 +982,6 @@
     public void testLockFpsForHighZone() throws Exception {
         DisplayModeDirector director =
                 createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
-        setPeakRefreshRate(90 /*fps*/);
         director.getSettingsObserver().setDefaultRefreshRate(90);
         director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
 
@@ -985,6 +989,7 @@
         config.setRefreshRateInHighZone(60);
         config.setHighDisplayBrightnessThresholds(new int[] { 255 });
         config.setHighAmbientBrightnessThresholds(new int[] { 8000 });
+        config.setDefaultPeakRefreshRate(90);
 
         Sensor lightSensor = createLightSensor();
         SensorManager sensorManager = createMockSensorManager(lightSensor);
@@ -1032,16 +1037,123 @@
     }
 
     @Test
+    public void testSmoothDisplay() {
+        float defaultRefreshRate = 60;
+        int defaultPeakRefreshRate = 100;
+        DisplayModeDirector director =
+                createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
+        director.getSettingsObserver().setDefaultRefreshRate(defaultRefreshRate);
+        director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
+
+        final FakeDeviceConfig config = mInjector.getDeviceConfig();
+        config.setDefaultPeakRefreshRate(defaultPeakRefreshRate);
+
+        Sensor lightSensor = createLightSensor();
+        SensorManager sensorManager = createMockSensorManager(lightSensor);
+        director.start(sensorManager);
+
+        // Default value of the setting
+
+        Vote vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                defaultPeakRefreshRate);
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                Float.POSITIVE_INFINITY);
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_DEFAULT_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                defaultRefreshRate);
+
+        setSmoothDisplayEnabled(false);
+
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE);
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                Float.POSITIVE_INFINITY);
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_DEFAULT_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                defaultRefreshRate);
+
+        setSmoothDisplayEnabled(true);
+
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext));
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                Float.POSITIVE_INFINITY);
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_DEFAULT_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                defaultRefreshRate);
+    }
+
+    @Test
+    public void testForcePeakRefreshRate() {
+        float defaultRefreshRate = 60;
+        DisplayModeDirector director =
+                createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
+        director.getSettingsObserver().setDefaultRefreshRate(defaultRefreshRate);
+        director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
+
+        Sensor lightSensor = createLightSensor();
+        SensorManager sensorManager = createMockSensorManager(lightSensor);
+        director.start(sensorManager);
+
+        setForcePeakRefreshRateEnabled(false);
+        setSmoothDisplayEnabled(false);
+
+        Vote vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE);
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0,
+                /* frameRateHigh= */ Float.POSITIVE_INFINITY);
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_DEFAULT_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                defaultRefreshRate);
+
+        setForcePeakRefreshRateEnabled(true);
+
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext));
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_USER_SETTING_MIN_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */
+                RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(mContext),
+                /* frameRateHigh= */ Float.POSITIVE_INFINITY);
+        vote = director.getVote(Display.DEFAULT_DISPLAY,
+                Vote.PRIORITY_DEFAULT_RENDER_FRAME_RATE);
+        assertVoteForRenderFrameRateRange(vote, /* frameRateLow= */ 0, /* frameRateHigh= */
+                defaultRefreshRate);
+    }
+
+    @Test
     public void testSensorRegistration() {
         // First, configure brightness zones or DMD won't register for sensor data.
         final FakeDeviceConfig config = mInjector.getDeviceConfig();
         config.setRefreshRateInHighZone(60);
         config.setHighDisplayBrightnessThresholds(new int[] { 255 });
         config.setHighAmbientBrightnessThresholds(new int[] { 8000 });
+        config.setDefaultPeakRefreshRate(90);
 
         DisplayModeDirector director =
                 createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
-        setPeakRefreshRate(90 /*fps*/);
         director.getSettingsObserver().setDefaultRefreshRate(90);
         director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
 
@@ -2417,10 +2529,10 @@
         config.setRefreshRateInHighZone(60);
         config.setHighDisplayBrightnessThresholds(new int[] { 255 });
         config.setHighAmbientBrightnessThresholds(new int[] { 8000 });
+        config.setDefaultPeakRefreshRate(90);
 
         DisplayModeDirector director =
                 createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
-        setPeakRefreshRate(90 /*fps*/);
         director.getSettingsObserver().setDefaultRefreshRate(90);
         director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
 
@@ -2533,6 +2645,33 @@
         assertNull(vote);
     }
 
+    @Test
+    public void testUpdateLayoutLimitedRefreshRate() {
+        DisplayModeDirector director =
+                createDirectorFromRefreshRateArray(new float[]{60.0f, 90.0f}, 0);
+        director.start(createMockSensorManager());
+
+        ArgumentCaptor<DisplayListener> displayListenerCaptor =
+                ArgumentCaptor.forClass(DisplayListener.class);
+        verify(mInjector).registerDisplayListener(displayListenerCaptor.capture(),
+                any(Handler.class));
+        DisplayListener displayListener = displayListenerCaptor.getValue();
+
+        float refreshRate = 60;
+        mInjector.mDisplayInfo.layoutLimitedRefreshRate =
+                new RefreshRateRange(refreshRate, refreshRate);
+        displayListener.onDisplayChanged(DISPLAY_ID);
+
+        Vote vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_LAYOUT_LIMITED_FRAME_RATE);
+        assertVoteForPhysicalRefreshRate(vote, /* refreshRate= */ refreshRate);
+
+        mInjector.mDisplayInfo.layoutLimitedRefreshRate = null;
+        displayListener.onDisplayChanged(DISPLAY_ID);
+
+        vote = director.getVote(DISPLAY_ID, Vote.PRIORITY_LAYOUT_LIMITED_FRAME_RATE);
+        assertNull(vote);
+    }
+
     private Temperature getSkinTemp(@Temperature.ThrottlingStatus int status) {
         return new Temperature(30.0f, Temperature.TYPE_SKIN, "test_skin_temp", status);
     }
@@ -2671,10 +2810,30 @@
         listener.onDisplayChanged(DISPLAY_ID);
     }
 
-    private void setPeakRefreshRate(float fps) {
-        Settings.System.putFloat(mContext.getContentResolver(), Settings.System.PEAK_REFRESH_RATE,
-                 fps);
-        mInjector.notifyPeakRefreshRateChanged();
+    private void setSmoothDisplayEnabled(boolean enabled) {
+        Settings.System.putInt(mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY,
+                enabled ? 1 : 0);
+        mInjector.notifySmoothDisplaySettingChanged();
+        waitForIdleSync();
+    }
+
+    private void clearSmoothDisplaySetting() {
+        Settings.System.putInt(mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY, -1);
+        mInjector.notifySmoothDisplaySettingChanged();
+        waitForIdleSync();
+    }
+
+    private void setForcePeakRefreshRateEnabled(boolean enabled) {
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.FORCE_PEAK_REFRESH_RATE, enabled ? 1 : 0);
+        mInjector.notifyForcePeakRefreshRateSettingChanged();
+        waitForIdleSync();
+    }
+
+    private void clearForcePeakRefreshRateSetting() {
+        Settings.System.putInt(mContext.getContentResolver(),
+                Settings.System.FORCE_PEAK_REFRESH_RATE, -1);
+        mInjector.notifySmoothDisplaySettingChanged();
         waitForIdleSync();
     }
 
@@ -2719,11 +2878,19 @@
 
     public static class FakesInjector implements DisplayModeDirector.Injector {
         private final FakeDeviceConfig mDeviceConfig;
+        private final DisplayInfo mDisplayInfo;
+        private final Display mDisplay;
         private ContentObserver mBrightnessObserver;
-        private ContentObserver mPeakRefreshRateObserver;
+        private ContentObserver mSmoothDisplaySettingObserver;
+        private ContentObserver mForcePeakRefreshRateSettingObserver;
 
         FakesInjector() {
             mDeviceConfig = new FakeDeviceConfig();
+            mDisplayInfo = new DisplayInfo();
+            mDisplayInfo.defaultModeId = MODE_ID;
+            mDisplayInfo.supportedModes = new Display.Mode[] {new Display.Mode(MODE_ID,
+                    800, 600, /* refreshRate= */ 60)};
+            mDisplay = createDisplay(DISPLAY_ID);
         }
 
         @NonNull
@@ -2732,22 +2899,37 @@
         }
 
         @Override
-        public void registerPeakRefreshRateObserver(@NonNull ContentResolver cr,
+        public void registerSmoothDisplayObserver(@NonNull ContentResolver cr,
                 @NonNull ContentObserver observer) {
-            mPeakRefreshRateObserver = observer;
+            mSmoothDisplaySettingObserver = observer;
         }
 
         @Override
+        public void registerForcePeakRefreshRateObserver(@NonNull ContentResolver cr,
+                @NonNull ContentObserver observer) {
+            mForcePeakRefreshRateSettingObserver = observer;
+        }
+
+        @Override
+        public void registerDisplayListener(DisplayListener listener, Handler handler) {}
+
+        @Override
         public void registerDisplayListener(DisplayListener listener, Handler handler, long flag) {}
 
         @Override
+        public Display getDisplay(int displayId) {
+            return mDisplay;
+        }
+
+        @Override
         public Display[] getDisplays() {
-            return new Display[] { createDisplay(DISPLAY_ID) };
+            return new Display[] { mDisplay };
         }
 
         @Override
         public boolean getDisplayInfo(int displayId, DisplayInfo displayInfo) {
-            return false;
+            displayInfo.copyFrom(mDisplayInfo);
+            return true;
         }
 
         @Override
@@ -2771,14 +2953,21 @@
         }
 
         protected Display createDisplay(int id) {
-            return new Display(DisplayManagerGlobal.getInstance(), id, new DisplayInfo(),
+            return new Display(DisplayManagerGlobal.getInstance(), id, mDisplayInfo,
                     ApplicationProvider.getApplicationContext().getResources());
         }
 
-        void notifyPeakRefreshRateChanged() {
-            if (mPeakRefreshRateObserver != null) {
-                mPeakRefreshRateObserver.dispatchChange(false /*selfChange*/,
-                        PEAK_REFRESH_RATE_URI);
+        void notifySmoothDisplaySettingChanged() {
+            if (mSmoothDisplaySettingObserver != null) {
+                mSmoothDisplaySettingObserver.dispatchChange(false /*selfChange*/,
+                        SMOOTH_DISPLAY_URI);
+            }
+        }
+
+        void notifyForcePeakRefreshRateSettingChanged() {
+            if (mForcePeakRefreshRateSettingObserver != null) {
+                mForcePeakRefreshRateSettingObserver.dispatchChange(false /*selfChange*/,
+                        FORCE_PEAK_REFRESH_RATE_URI);
             }
         }
     }
diff --git a/services/tests/servicestests/src/com/android/server/display/mode/SkinThermalStatusObserverTest.java b/services/tests/servicestests/src/com/android/server/display/mode/SkinThermalStatusObserverTest.java
index fd1889c..13540d6 100644
--- a/services/tests/servicestests/src/com/android/server/display/mode/SkinThermalStatusObserverTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/mode/SkinThermalStatusObserverTest.java
@@ -253,7 +253,7 @@
         public boolean getDisplayInfo(int displayId, DisplayInfo displayInfo) {
             SparseArray<SurfaceControl.RefreshRateRange> config = mOverriddenConfig.get(displayId);
             if (config != null) {
-                displayInfo.refreshRateThermalThrottling = config;
+                displayInfo.thermalRefreshRateThrottling = config;
                 return true;
             }
             return false;
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/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
index a0fb3de..21a11bc 100644
--- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -763,7 +763,7 @@
                 ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
         verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
                 dreamManagerStateListener.capture());
-        dreamManagerStateListener.getValue().onKeepDreamingWhenUndockedChanged(false);
+        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false);
 
         when(mBatteryManagerInternalMock.getPlugType())
                 .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK);
@@ -793,7 +793,7 @@
                 ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
         verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
                 dreamManagerStateListener.capture());
-        dreamManagerStateListener.getValue().onKeepDreamingWhenUndockedChanged(true);
+        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(true);
 
         when(mBatteryManagerInternalMock.getPlugType())
                 .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK);
@@ -823,7 +823,7 @@
                 ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
         verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
                 dreamManagerStateListener.capture());
-        dreamManagerStateListener.getValue().onKeepDreamingWhenUndockedChanged(true);
+        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(true);
 
         when(mBatteryManagerInternalMock.getPlugType())
                 .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK);
@@ -831,7 +831,7 @@
 
         forceAwake();  // Needs to be awake first before it can dream.
         forceDream();
-        dreamManagerStateListener.getValue().onKeepDreamingWhenUndockedChanged(false);
+        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false);
         when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
         setPluggedIn(false);
 
@@ -839,6 +839,34 @@
     }
 
     @Test
+    public void testWakefulnessDream_shouldStopDreamingWhenUnplugging_whenDreamPrevents() {
+        // Make sure "unplug turns on screen" is configured to true.
+        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+                .thenReturn(true);
+
+        createService();
+        startSystem();
+
+        ArgumentCaptor<DreamManagerInternal.DreamManagerStateListener> dreamManagerStateListener =
+                ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
+        verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
+                dreamManagerStateListener.capture());
+
+        when(mBatteryManagerInternalMock.getPlugType())
+                .thenReturn(BatteryManager.BATTERY_PLUGGED_AC);
+        setPluggedIn(true);
+
+        forceAwake();  // Needs to be awake first before it can dream.
+        forceDream();
+        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false);
+        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
+        setPluggedIn(false);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+
+    @Test
     public void testWakefulnessDoze_goToSleep() {
         createService();
         // Start with AWAKE state
diff --git a/services/tests/servicestests/src/com/android/server/power/ShutdownCheckPointsTest.java b/services/tests/servicestests/src/com/android/server/power/ShutdownCheckPointsTest.java
index 2230ddd..2bde51b 100644
--- a/services/tests/servicestests/src/com/android/server/power/ShutdownCheckPointsTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/ShutdownCheckPointsTest.java
@@ -103,21 +103,45 @@
     }
 
     @Test
-    public void testCallerProcessBinderEntry() throws RemoteException {
+    public void testCallerProcessBinderEntries() throws RemoteException {
         List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = new ArrayList<>();
         runningAppProcessInfos.add(
                 new ActivityManager.RunningAppProcessInfo("process_name", 1, new String[0]));
         when(mActivityManager.getRunningAppProcesses()).thenReturn(runningAppProcessInfos);
 
         mTestInjector.setCurrentTime(1000);
+        // Matching pid in getRunningAppProcesses
+        mInstance.recordCheckPointInternal(1, "reason1");
+        // Mising pid in getRunningAppProcesses
+        mInstance.recordCheckPointInternal(2, "reason2");
+
+        assertEquals(
+                "Shutdown request from BINDER for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest"
+                        + ".testCallerProcessBinderEntries\n"
+                        + "From process process_name (pid=1)\n\n"
+                        + "Shutdown request from BINDER for reason reason2 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest"
+                        + ".testCallerProcessBinderEntries\n"
+                        + "From process ? (pid=2)\n\n",
+                dumpToString());
+    }
+
+    @Test
+    public void testNullCallerProcessBinderEntries() throws RemoteException {
+        when(mActivityManager.getRunningAppProcesses()).thenReturn(null);
+
+        mTestInjector.setCurrentTime(1000);
         mInstance.recordCheckPointInternal(1, "reason1");
 
         assertEquals(
                 "Shutdown request from BINDER for reason reason1 "
                         + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
                         + "com.android.server.power.ShutdownCheckPointsTest"
-                        + ".testCallerProcessBinderEntry\n"
-                        + "From process process_name (pid=1)\n\n",
+                        + ".testNullCallerProcessBinderEntries\n"
+                        + "From process ? (pid=1)\n\n",
                 dumpToString());
     }
 
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/power/stats/CpuWakeupStatsTest.java b/services/tests/servicestests/src/com/android/server/power/stats/wakeups/CpuWakeupStatsTest.java
similarity index 67%
rename from services/tests/servicestests/src/com/android/server/power/stats/CpuWakeupStatsTest.java
rename to services/tests/servicestests/src/com/android/server/power/stats/wakeups/CpuWakeupStatsTest.java
index 7cf5bc8..76b6a82 100644
--- a/services/tests/servicestests/src/com/android/server/power/stats/CpuWakeupStatsTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/stats/wakeups/CpuWakeupStatsTest.java
@@ -14,13 +14,16 @@
  * limitations under the License.
  */
 
-package com.android.server.power.stats;
+package com.android.server.power.stats.wakeups;
 
 import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_ALARM;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_SENSOR;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER;
 import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_UNKNOWN;
 import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_WIFI;
 
-import static com.android.server.power.stats.CpuWakeupStats.WAKEUP_REASON_HALF_WINDOW_MS;
+import static com.android.server.power.stats.wakeups.CpuWakeupStats.WAKEUP_REASON_HALF_WINDOW_MS;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -34,6 +37,7 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
 import com.android.frameworks.servicestests.R;
+import com.android.server.power.stats.wakeups.CpuWakeupStats.Wakeup;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -46,10 +50,13 @@
 @RunWith(AndroidJUnit4.class)
 public class CpuWakeupStatsTest {
     private static final String KERNEL_REASON_ALARM_IRQ = "120 test.alarm.device";
-    private static final String KERNEL_REASON_WIFI_IRQ = "120 test.wifi.device";
+    private static final String KERNEL_REASON_WIFI_IRQ = "130 test.wifi.device";
+    private static final String KERNEL_REASON_SOUND_TRIGGER_IRQ = "129 test.sound_trigger.device";
+    private static final String KERNEL_REASON_SENSOR_IRQ = "15 test.sensor.device";
+    private static final String KERNEL_REASON_CELLULAR_DATA_IRQ = "18 test.cellular_data.device";
     private static final String KERNEL_REASON_UNKNOWN_IRQ = "140 test.unknown.device";
     private static final String KERNEL_REASON_UNKNOWN = "free-form-reason test.alarm.device";
-    private static final String KERNEL_REASON_UNSUPPORTED = "-1 test.alarm.device";
+    private static final String KERNEL_REASON_ALARM_ABNORMAL = "-1 test.alarm.device";
     private static final String KERNEL_REASON_ABORT = "Abort: due to test.alarm.device";
 
     private static final int TEST_UID_1 = 13239823;
@@ -107,6 +114,83 @@
     }
 
     @Test
+    public void irqAttributionAllCombinations() {
+        final int[] subsystems = new int[] {
+                CPU_WAKEUP_SUBSYSTEM_ALARM,
+                CPU_WAKEUP_SUBSYSTEM_WIFI,
+                CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER,
+                CPU_WAKEUP_SUBSYSTEM_SENSOR,
+                CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA,
+        };
+
+        final String[] kernelReasons = new String[] {
+                KERNEL_REASON_ALARM_IRQ,
+                KERNEL_REASON_WIFI_IRQ,
+                KERNEL_REASON_SOUND_TRIGGER_IRQ,
+                KERNEL_REASON_SENSOR_IRQ,
+                KERNEL_REASON_CELLULAR_DATA_IRQ,
+        };
+
+        final int[] uids = new int[] {
+                TEST_UID_2, TEST_UID_3, TEST_UID_4, TEST_UID_1, TEST_UID_5
+        };
+
+        final int[] procStates = new int[] {
+                TEST_PROC_STATE_2,
+                TEST_PROC_STATE_3,
+                TEST_PROC_STATE_4,
+                TEST_PROC_STATE_1,
+                TEST_PROC_STATE_5
+        };
+
+        final int total = subsystems.length;
+        assertThat(kernelReasons.length).isEqualTo(total);
+        assertThat(uids.length).isEqualTo(total);
+        assertThat(procStates.length).isEqualTo(total);
+
+        for (int mask = 1; mask < (1 << total); mask++) {
+            final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3,
+                    mHandler);
+            populateDefaultProcStates(obj);
+
+            final long wakeupTime = mRandom.nextLong(123456);
+
+            String combinedKernelReason = null;
+            for (int i = 0; i < total; i++) {
+                if ((mask & (1 << i)) != 0) {
+                    combinedKernelReason = (combinedKernelReason == null)
+                            ? kernelReasons[i]
+                            : String.join(":", combinedKernelReason, kernelReasons[i]);
+                }
+
+                obj.noteWakingActivity(subsystems[i], wakeupTime + 2, uids[i]);
+            }
+            obj.noteWakeupTimeAndReason(wakeupTime, 1, combinedKernelReason);
+
+            assertThat(obj.mWakeupAttribution.size()).isEqualTo(1);
+
+            final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
+            assertThat(attribution.size()).isEqualTo(Integer.bitCount(mask));
+
+            for (int i = 0; i < total; i++) {
+                if ((mask & (1 << i)) == 0) {
+                    assertThat(attribution.contains(subsystems[i])).isFalse();
+                    continue;
+                }
+                assertThat(attribution.contains(subsystems[i])).isTrue();
+                assertThat(attribution.get(subsystems[i]).get(uids[i])).isEqualTo(procStates[i]);
+
+                for (int j = 0; j < total; j++) {
+                    if (i == j) {
+                        continue;
+                    }
+                    assertThat(attribution.get(subsystems[i]).indexOfKey(uids[j])).isLessThan(0);
+                }
+            }
+        }
+    }
+
+    @Test
     public void alarmIrqAttributionSolo() {
         final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
         final long wakeupTime = 12423121;
@@ -140,6 +224,40 @@
     }
 
     @Test
+    public void soundTriggerIrqAttributionSolo() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        final long wakeupTime = 1247121;
+
+        populateDefaultProcStates(obj);
+
+        obj.noteWakeupTimeAndReason(wakeupTime, 1, KERNEL_REASON_SOUND_TRIGGER_IRQ);
+
+        // Outside the window, so should be ignored.
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER,
+                wakeupTime - WAKEUP_REASON_HALF_WINDOW_MS - 1, TEST_UID_1);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER,
+                wakeupTime + WAKEUP_REASON_HALF_WINDOW_MS + 1, TEST_UID_2);
+        // Should be attributed
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER, wakeupTime + 5, TEST_UID_3,
+                TEST_UID_5);
+
+        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
+        assertThat(attribution).isNotNull();
+        assertThat(attribution.size()).isEqualTo(1);
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER)).isTrue();
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).indexOfKey(
+                TEST_UID_1)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).indexOfKey(
+                TEST_UID_2)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).get(TEST_UID_3)).isEqualTo(
+                TEST_PROC_STATE_3);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).indexOfKey(
+                TEST_UID_4)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).get(TEST_UID_5)).isEqualTo(
+                TEST_PROC_STATE_5);
+    }
+
+    @Test
     public void wifiIrqAttributionSolo() {
         final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
         final long wakeupTime = 12423121;
@@ -268,22 +386,39 @@
     }
 
     @Test
-    public void unsupportedWakeupIgnored() {
+    public void abnormalAlarmAttribution() {
         final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        populateDefaultProcStates(obj);
 
         long wakeupTime = 970934;
-        obj.noteWakeupTimeAndReason(wakeupTime, 34, KERNEL_REASON_UNSUPPORTED);
+        obj.noteWakeupTimeAndReason(wakeupTime, 34, KERNEL_REASON_ALARM_ABNORMAL);
 
-        // Should be ignored as this type of wakeup is unsupported.
-        assertThat(obj.mWakeupEvents.size()).isEqualTo(0);
+        assertThat(obj.mWakeupEvents.size()).isEqualTo(1);
+        assertThat(obj.mWakeupEvents.valueAt(0).mType).isEqualTo(Wakeup.TYPE_ABNORMAL);
 
         obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
         obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime - 3, TEST_UID_4);
 
-        // Any nearby activity should not end up in the attribution map.
-        assertThat(obj.mWakeupAttribution.size()).isEqualTo(0);
+        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
+        assertThat(attribution.size()).isEqualTo(1);
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_ALARM)).isTrue();
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_1)).isLessThan(
+                0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_2)).isLessThan(
+                0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_3)).isEqualTo(
+                TEST_PROC_STATE_3);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_4)).isEqualTo(
+                TEST_PROC_STATE_4);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_5)).isLessThan(
+                0);
+    }
 
-        wakeupTime = 883124;
+    @Test
+    public void abortIgnored() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+
+        long wakeupTime = 883124;
         obj.noteWakeupTimeAndReason(wakeupTime, 3, KERNEL_REASON_ABORT);
 
         // Should be ignored as this type of wakeup is unsupported.
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/IrqDeviceMapTest.java b/services/tests/servicestests/src/com/android/server/power/stats/wakeups/IrqDeviceMapTest.java
similarity index 98%
rename from services/tests/servicestests/src/com/android/server/power/stats/IrqDeviceMapTest.java
rename to services/tests/servicestests/src/com/android/server/power/stats/wakeups/IrqDeviceMapTest.java
index 43d9e60..47a8f49 100644
--- a/services/tests/servicestests/src/com/android/server/power/stats/IrqDeviceMapTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/stats/wakeups/IrqDeviceMapTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.server.power.stats;
+package com.android.server.power.stats.wakeups;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/services/tests/servicestests/src/com/android/server/rollback/RollbackPackageHealthObserverTest.java b/services/tests/servicestests/src/com/android/server/rollback/RollbackPackageHealthObserverTest.java
deleted file mode 100644
index 0be678a..0000000
--- a/services/tests/servicestests/src/com/android/server/rollback/RollbackPackageHealthObserverTest.java
+++ /dev/null
@@ -1,157 +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.server.rollback;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.pm.VersionedPackage;
-import android.util.Log;
-import android.util.Xml;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.server.SystemConfig;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
-import org.xmlpull.v1.XmlPullParser;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Scanner;
-
-@RunWith(AndroidJUnit4.class)
-public class RollbackPackageHealthObserverTest {
-    private static final String LOG_TAG = "RollbackPackageHealthObserverTest";
-
-    private SystemConfig mSysConfig;
-
-    @Rule public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
-
-    @Before
-    public void setup() {
-        mSysConfig = new SystemConfigTestClass();
-    }
-
-    /**
-    * Subclass of SystemConfig without running the constructor.
-    */
-    private class SystemConfigTestClass extends SystemConfig {
-        SystemConfigTestClass() {
-          super(false);
-        }
-    }
-
-    /**
-     * Test that isAutomaticRollbackDenied works correctly when packages that are not
-     * denied are sent.
-     */
-    @Test
-    public void isRollbackAllowedTest_false() throws IOException {
-        final String contents =
-                "<config>\n"
-                + "    <automatic-rollback-denylisted-app package=\"com.android.vending\" />\n"
-                + "</config>";
-        final File folder = createTempSubfolder("folder");
-        createTempFile(folder, "automatic-rollback-denylisted-app.xml", contents);
-
-        readPermissions(folder, /* Grant all permission flags */ ~0);
-
-        assertThat(RollbackPackageHealthObserver.isAutomaticRollbackDenied(mSysConfig,
-            new VersionedPackage("com.test.package", 1))).isEqualTo(false);
-    }
-
-    /**
-     * Test that isAutomaticRollbackDenied works correctly when packages that are
-     * denied are sent.
-     */
-    @Test
-    public void isRollbackAllowedTest_true() throws IOException {
-        final String contents =
-                "<config>\n"
-                + "    <automatic-rollback-denylisted-app package=\"com.android.vending\" />\n"
-                + "</config>";
-        final File folder = createTempSubfolder("folder");
-        createTempFile(folder, "automatic-rollback-denylisted-app.xml", contents);
-
-        readPermissions(folder, /* Grant all permission flags */ ~0);
-
-        assertThat(RollbackPackageHealthObserver.isAutomaticRollbackDenied(mSysConfig,
-            new VersionedPackage("com.android.vending", 1))).isEqualTo(true);
-    }
-
-    /**
-     * Test that isAutomaticRollbackDenied works correctly when no config is present
-     */
-    @Test
-    public void isRollbackAllowedTest_noConfig() throws IOException {
-        final File folder = createTempSubfolder("folder");
-
-        readPermissions(folder, /* Grant all permission flags */ ~0);
-
-        assertThat(RollbackPackageHealthObserver.isAutomaticRollbackDenied(mSysConfig,
-            new VersionedPackage("com.android.vending", 1))).isEqualTo(false);
-    }
-
-    /**
-     * Creates folderName/fileName in the mTemporaryFolder and fills it with the contents.
-     *
-     * @param folder   pre-existing subdirectory of mTemporaryFolder to put the file
-     * @param fileName name of the file (e.g. filename.xml) to create
-     * @param contents contents to write to the file
-     * @return the newly created file
-     */
-    private File createTempFile(File folder, String fileName, String contents)
-            throws IOException {
-        File file = new File(folder, fileName);
-        BufferedWriter bw = new BufferedWriter(new FileWriter(file));
-        bw.write(contents);
-        bw.close();
-
-        // Print to logcat for test debugging.
-        Log.d(LOG_TAG, "Contents of file " + file.getAbsolutePath());
-        Scanner input = new Scanner(file);
-        while (input.hasNextLine()) {
-            Log.d(LOG_TAG, input.nextLine());
-        }
-
-        return file;
-    }
-
-    private void readPermissions(File libraryDir, int permissionFlag) {
-        final XmlPullParser parser = Xml.newPullParser();
-        mSysConfig.readPermissions(parser, libraryDir, permissionFlag);
-    }
-
-    /**
-     * Creates folderName/fileName in the mTemporaryFolder and fills it with the contents.
-     *
-     * @param folderName subdirectory of mTemporaryFolder to put the file, creating if needed
-     * @return the folder
-     */
-    private File createTempSubfolder(String folderName)
-            throws IOException {
-        File folder = new File(mTemporaryFolder.getRoot(), folderName);
-        folder.mkdirs();
-        return folder;
-    }
-}
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/GroupHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java
index ff6c976..516fb4a 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java
@@ -15,23 +15,31 @@
  */
 package com.android.server.notification;
 
-import static com.android.server.notification.GroupHelper.AUTOGROUP_KEY;
+import static android.app.Notification.FLAG_AUTO_CANCEL;
+import static android.app.Notification.FLAG_BUBBLE;
+import static android.app.Notification.FLAG_CAN_COLORIZE;
+import static android.app.Notification.FLAG_FOREGROUND_SERVICE;
+import static android.app.Notification.FLAG_NO_CLEAR;
+import static android.app.Notification.FLAG_ONGOING_EVENT;
+
+import static com.android.server.notification.GroupHelper.BASE_FLAGS;
 
 import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNotNull;
 
-import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
 
+import android.annotation.SuppressLint;
 import android.app.Notification;
 import android.os.UserHandle;
 import android.service.notification.StatusBarNotification;
 import android.test.suitebuilder.annotation.SmallTest;
+import android.util.ArrayMap;
 
 import androidx.test.runner.AndroidJUnit4;
 
@@ -45,11 +53,10 @@
 import org.mockito.MockitoAnnotations;
 
 import java.util.ArrayList;
-import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Map;
 
 @SmallTest
+@SuppressLint("GuardedBy") // It's ok for this test to access guarded methods from the class.
 @RunWith(AndroidJUnit4.class)
 public class GroupHelperTest extends UiServiceTestCase {
     private @Mock GroupHelper.Callback mCallback;
@@ -82,21 +89,104 @@
     }
 
     @Test
-    public void testNoGroup_postingUnderLimit() throws Exception {
+    public void testGetAutogroupSummaryFlags_noChildren() {
+        ArrayMap<String, Integer> children = new ArrayMap<>();
+
+        assertEquals(BASE_FLAGS, mGroupHelper.getAutogroupSummaryFlags(children));
+    }
+
+    @Test
+    public void testGetAutogroupSummaryFlags_oneOngoing() {
+        ArrayMap<String, Integer> children = new ArrayMap<>();
+        children.put("a", 0);
+        children.put("b", FLAG_ONGOING_EVENT);
+        children.put("c", FLAG_BUBBLE);
+
+        assertEquals(FLAG_ONGOING_EVENT | BASE_FLAGS,
+                mGroupHelper.getAutogroupSummaryFlags(children));
+    }
+
+    @Test
+    public void testGetAutogroupSummaryFlags_oneOngoingNoClear() {
+        ArrayMap<String, Integer> children = new ArrayMap<>();
+        children.put("a", 0);
+        children.put("b", FLAG_ONGOING_EVENT|FLAG_NO_CLEAR);
+        children.put("c", FLAG_BUBBLE);
+
+        assertEquals(FLAG_NO_CLEAR | FLAG_ONGOING_EVENT | BASE_FLAGS,
+                mGroupHelper.getAutogroupSummaryFlags(children));
+    }
+
+    @Test
+    public void testGetAutogroupSummaryFlags_oneOngoingBubble() {
+        ArrayMap<String, Integer> children = new ArrayMap<>();
+        children.put("a", 0);
+        children.put("b", FLAG_ONGOING_EVENT | FLAG_BUBBLE);
+        children.put("c", FLAG_BUBBLE);
+
+        assertEquals(FLAG_ONGOING_EVENT | BASE_FLAGS,
+                mGroupHelper.getAutogroupSummaryFlags(children));
+    }
+
+    @Test
+    public void testGetAutogroupSummaryFlags_multipleOngoing() {
+        ArrayMap<String, Integer> children = new ArrayMap<>();
+        children.put("a", 0);
+        children.put("b", FLAG_ONGOING_EVENT);
+        children.put("c", FLAG_BUBBLE);
+        children.put("d", FLAG_ONGOING_EVENT);
+
+        assertEquals(FLAG_ONGOING_EVENT | BASE_FLAGS,
+                mGroupHelper.getAutogroupSummaryFlags(children));
+    }
+
+    @Test
+    public void testGetAutogroupSummaryFlags_oneAutoCancel() {
+        ArrayMap<String, Integer> children = new ArrayMap<>();
+        children.put("a", 0);
+        children.put("b", FLAG_AUTO_CANCEL);
+        children.put("c", FLAG_BUBBLE);
+
+        assertEquals(BASE_FLAGS,
+                mGroupHelper.getAutogroupSummaryFlags(children));
+    }
+
+    @Test
+    public void testGetAutogroupSummaryFlags_allAutoCancel() {
+        ArrayMap<String, Integer> children = new ArrayMap<>();
+        children.put("a", FLAG_AUTO_CANCEL);
+        children.put("b", FLAG_AUTO_CANCEL | FLAG_CAN_COLORIZE);
+        children.put("c", FLAG_AUTO_CANCEL);
+        children.put("d", FLAG_AUTO_CANCEL | FLAG_FOREGROUND_SERVICE);
+
+        assertEquals(FLAG_AUTO_CANCEL | BASE_FLAGS,
+                mGroupHelper.getAutogroupSummaryFlags(children));
+    }
+
+    @Test
+    public void testGetAutogroupSummaryFlags_allAutoCancelOneOngoing() {
+        ArrayMap<String, Integer> children = new ArrayMap<>();
+        children.put("a", FLAG_AUTO_CANCEL);
+        children.put("b", FLAG_AUTO_CANCEL | FLAG_CAN_COLORIZE);
+        children.put("c", FLAG_AUTO_CANCEL);
+        children.put("d", FLAG_AUTO_CANCEL | FLAG_FOREGROUND_SERVICE | FLAG_ONGOING_EVENT);
+
+        assertEquals(FLAG_AUTO_CANCEL| FLAG_ONGOING_EVENT | BASE_FLAGS,
+                mGroupHelper.getAutogroupSummaryFlags(children));
+    }
+
+    @Test
+    public void testNoGroup_postingUnderLimit() {
         final String pkg = "package";
         for (int i = 0; i < AUTOGROUP_AT_COUNT - 1; i++) {
             mGroupHelper.onNotificationPosted(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM),
                     false);
         }
-        verify(mCallback, never()).addAutoGroupSummary(
-                eq(UserHandle.USER_SYSTEM), eq(pkg), anyString(), anyBoolean());
-        verify(mCallback, never()).addAutoGroup(anyString());
-        verify(mCallback, never()).removeAutoGroup(anyString());
-        verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        verifyZeroInteractions(mCallback);
     }
 
     @Test
-    public void testNoGroup_multiPackage() throws Exception {
+    public void testNoGroup_multiPackage() {
         final String pkg = "package";
         final String pkg2 = "package2";
         for (int i = 0; i < AUTOGROUP_AT_COUNT - 1; i++) {
@@ -105,31 +195,23 @@
         }
         mGroupHelper.onNotificationPosted(
                 getSbn(pkg2, AUTOGROUP_AT_COUNT, "four", UserHandle.SYSTEM), false);
-        verify(mCallback, never()).addAutoGroupSummary(
-                eq(UserHandle.USER_SYSTEM), eq(pkg), anyString(), anyBoolean());
-        verify(mCallback, never()).addAutoGroup(anyString());
-        verify(mCallback, never()).removeAutoGroup(anyString());
-        verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        verifyZeroInteractions(mCallback);
     }
 
     @Test
-    public void testNoGroup_multiUser() throws Exception {
+    public void testNoGroup_multiUser() {
         final String pkg = "package";
         for (int i = 0; i < AUTOGROUP_AT_COUNT - 1; i++) {
             mGroupHelper.onNotificationPosted(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM),
                     false);
         }
         mGroupHelper.onNotificationPosted(
-                getSbn(pkg, AUTOGROUP_AT_COUNT, "four", UserHandle.ALL), false);
-        verify(mCallback, never()).addAutoGroupSummary(
-                anyInt(), eq(pkg), anyString(), anyBoolean());
-        verify(mCallback, never()).addAutoGroup(anyString());
-        verify(mCallback, never()).removeAutoGroup(anyString());
-        verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+                getSbn(pkg, AUTOGROUP_AT_COUNT, "four", UserHandle.of(7)), false);
+        verifyZeroInteractions(mCallback);
     }
 
     @Test
-    public void testNoGroup_someAreGrouped() throws Exception {
+    public void testNoGroup_someAreGrouped() {
         final String pkg = "package";
         for (int i = 0; i < AUTOGROUP_AT_COUNT - 1; i++) {
             mGroupHelper.onNotificationPosted(
@@ -137,233 +219,344 @@
         }
         mGroupHelper.onNotificationPosted(
                 getSbn(pkg, AUTOGROUP_AT_COUNT, "four", UserHandle.SYSTEM, "a"), false);
-        verify(mCallback, never()).addAutoGroupSummary(
-                eq(UserHandle.USER_SYSTEM), eq(pkg), anyString(), anyBoolean());
-        verify(mCallback, never()).addAutoGroup(anyString());
-        verify(mCallback, never()).removeAutoGroup(anyString());
-        verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        verifyZeroInteractions(mCallback);
     }
 
     @Test
-    public void testPostingOverLimit() throws Exception {
+    public void testAddSummary() {
         final String pkg = "package";
         for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
             mGroupHelper.onNotificationPosted(
                     getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM), false);
         }
-        verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString(), eq(false));
+        verify(mCallback, times(1)).addAutoGroupSummary(
+                anyInt(), eq(pkg), anyString(), eq(BASE_FLAGS));
         verify(mCallback, times(AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        verify(mCallback, never()).updateAutogroupSummary(anyInt(), anyString(), anyInt());
     }
 
     @Test
-    public void testPostingOverLimit_addsOngoingFlag() throws Exception {
+    public void testAddSummary_oneChildOngoing_summaryOngoing() {
         final String pkg = "package";
         for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
             StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
             if (i == 0) {
-                sbn.getNotification().flags |= Notification.FLAG_ONGOING_EVENT;
+                sbn.getNotification().flags |= FLAG_ONGOING_EVENT;
             }
             mGroupHelper.onNotificationPosted(sbn, false);
         }
-        verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString(), eq(true));
+        verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString(),
+                eq(BASE_FLAGS | FLAG_ONGOING_EVENT));
         verify(mCallback, times(AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        verify(mCallback, never()).updateAutogroupSummary(anyInt(), anyString(), anyInt());
     }
 
     @Test
-    public void testAutoGroupCount_addingNoGroupSBN() {
+    public void testAddSummary_oneChildAutoCancel_summaryNotAutoCancel() {
         final String pkg = "package";
-        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
-        for (int i = 0; i < AUTOGROUP_AT_COUNT + 1; i++) {
-            notifications.add(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            if (i == 0) {
+                sbn.getNotification().flags |= FLAG_AUTO_CANCEL;
+            }
+            mGroupHelper.onNotificationPosted(sbn, false);
         }
-
-        for (StatusBarNotification sbn: notifications) {
-            sbn.getNotification().flags |= Notification.FLAG_ONGOING_EVENT;
-            sbn.setOverrideGroupKey(AUTOGROUP_KEY);
-        }
-
-        for (StatusBarNotification sbn: notifications) {
-            mGroupHelper.onNotificationPosted(sbn, true);
-        }
-
-        verify(mCallback, times(AUTOGROUP_AT_COUNT + 1))
-            .updateAutogroupSummary(anyInt(), anyString(), eq(true));
-
-        int userId = UserHandle.SYSTEM.getIdentifier();
-        assertEquals(mGroupHelper.getOngoingGroupCount(
-                userId, pkg), AUTOGROUP_AT_COUNT + 1);
+        verify(mCallback, times(1)).addAutoGroupSummary(
+                anyInt(), eq(pkg), anyString(), eq(BASE_FLAGS));
+        verify(mCallback, times(AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        verify(mCallback, never()).updateAutogroupSummary(anyInt(), anyString(), anyInt());
     }
 
     @Test
-    public void testAutoGroupCount_UpdateNotification() {
+    public void testAddSummary_allChildrenAutoCancel_summaryAutoCancel() {
         final String pkg = "package";
-        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
-        for (int i = 0; i < AUTOGROUP_AT_COUNT + 1; i++) {
-            notifications.add(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            sbn.getNotification().flags |= FLAG_AUTO_CANCEL;
+            mGroupHelper.onNotificationPosted(sbn, false);
         }
-
-        for (StatusBarNotification sbn: notifications) {
-            sbn.getNotification().flags |= Notification.FLAG_ONGOING_EVENT;
-            sbn.setOverrideGroupKey(AUTOGROUP_KEY);
-        }
-
-        for (StatusBarNotification sbn: notifications) {
-            mGroupHelper.onNotificationPosted(sbn, true);
-        }
-
-        notifications.get(0).getNotification().flags &= ~Notification.FLAG_ONGOING_EVENT;
-        mGroupHelper.onNotificationUpdated(notifications.get(0));
-
-        verify(mCallback, times(AUTOGROUP_AT_COUNT + 2))
-                .updateAutogroupSummary(anyInt(), anyString(), eq(true));
-
-        int userId = UserHandle.SYSTEM.getIdentifier();
-        assertEquals(mGroupHelper.getOngoingGroupCount(
-                userId, pkg), AUTOGROUP_AT_COUNT);
+        verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString(),
+                eq(BASE_FLAGS | FLAG_AUTO_CANCEL));
+        verify(mCallback, times(AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        verify(mCallback, never()).updateAutogroupSummary(anyInt(), anyString(), anyInt());
     }
 
     @Test
-    public void testAutoGroupCount_UpdateNotificationAfterChanges() {
+    public void testAddSummary_summaryAutoCancelNoClear() {
         final String pkg = "package";
-        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
-        for (int i = 0; i < AUTOGROUP_AT_COUNT + 1; i++) {
-            notifications.add(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            sbn.getNotification().flags |= FLAG_AUTO_CANCEL;
+            if (i == 0) {
+                sbn.getNotification().flags |= FLAG_NO_CLEAR;
+            }
+            mGroupHelper.onNotificationPosted(sbn, false);
         }
-
-        for (StatusBarNotification sbn: notifications) {
-            sbn.getNotification().flags |= Notification.FLAG_ONGOING_EVENT;
-            sbn.setOverrideGroupKey(AUTOGROUP_KEY);
-        }
-
-        for (StatusBarNotification sbn: notifications) {
-            mGroupHelper.onNotificationPosted(sbn, true);
-        }
-
-        notifications.get(0).getNotification().flags &= ~Notification.FLAG_ONGOING_EVENT;
-
-        mGroupHelper.onNotificationUpdated(notifications.get(0));
-
-        notifications.get(0).getNotification().flags |= Notification.FLAG_ONGOING_EVENT;
-
-        mGroupHelper.onNotificationUpdated(notifications.get(0));
-
-        verify(mCallback, times(AUTOGROUP_AT_COUNT + 3))
-                .updateAutogroupSummary(anyInt(), anyString(), eq(true));
-
-        int userId = UserHandle.SYSTEM.getIdentifier();
-        assertEquals(mGroupHelper.getOngoingGroupCount(
-                userId, pkg), AUTOGROUP_AT_COUNT + 1);
+        verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString(),
+                eq(BASE_FLAGS | FLAG_AUTO_CANCEL | FLAG_NO_CLEAR));
+        verify(mCallback, times(AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroup(anyString());
+        verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        verify(mCallback, never()).updateAutogroupSummary(anyInt(), anyString(), anyInt());
     }
 
     @Test
-    public void testAutoGroupCount_RemoveNotification() {
+    public void testAutoGrouped_allOngoing_updateChildNotOngoing() {
         final String pkg = "package";
+
+        // Post AUTOGROUP_AT_COUNT ongoing notifications
         ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
-        for (int i = 0; i < AUTOGROUP_AT_COUNT + 1; i++) {
-            notifications.add(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            sbn.getNotification().flags |= FLAG_ONGOING_EVENT;
+            notifications.add(sbn);
         }
 
         for (StatusBarNotification sbn: notifications) {
-            sbn.getNotification().flags |= Notification.FLAG_ONGOING_EVENT;
-            sbn.setOverrideGroupKey(AUTOGROUP_KEY);
+            mGroupHelper.onNotificationPosted(sbn, false);
+        }
+
+        // One notification is no longer ongoing
+        notifications.get(0).getNotification().flags &= ~FLAG_ONGOING_EVENT;
+        mGroupHelper.onNotificationPosted(notifications.get(0), true);
+
+        // Summary should keep FLAG_ONGOING_EVENT if any child has it
+        verify(mCallback).updateAutogroupSummary(
+                anyInt(), anyString(), eq(BASE_FLAGS | FLAG_ONGOING_EVENT));
+    }
+
+    @Test
+    public void testAutoGrouped_singleOngoing_removeOngoingChild() {
+        final String pkg = "package";
+
+        // Post AUTOGROUP_AT_COUNT ongoing notifications
+        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            if (i == 0) {
+                sbn.getNotification().flags |= FLAG_ONGOING_EVENT;
+            }
+            notifications.add(sbn);
         }
 
         for (StatusBarNotification sbn: notifications) {
-            mGroupHelper.onNotificationPosted(sbn, true);
+            mGroupHelper.onNotificationPosted(sbn, false);
+        }
+
+        // remove ongoing
+        mGroupHelper.onNotificationRemoved(notifications.get(0));
+
+        // Summary is no longer ongoing
+        verify(mCallback).updateAutogroupSummary(anyInt(), anyString(), eq(BASE_FLAGS));
+    }
+
+    @Test
+    public void testAutoGrouped_noOngoing_updateOngoingChild() {
+        final String pkg = "package";
+
+        // Post AUTOGROUP_AT_COUNT ongoing notifications
+        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            notifications.add(sbn);
+        }
+
+        for (StatusBarNotification sbn: notifications) {
+            mGroupHelper.onNotificationPosted(sbn, false);
+        }
+
+        // update to ongoing
+        notifications.get(0).getNotification().flags |= FLAG_ONGOING_EVENT;
+        mGroupHelper.onNotificationPosted(notifications.get(0), true);
+
+        // Summary is now ongoing
+        verify(mCallback).updateAutogroupSummary(
+                anyInt(), anyString(), eq(BASE_FLAGS | FLAG_ONGOING_EVENT));
+    }
+
+    @Test
+    public void testAutoGrouped_noOngoing_addOngoingChild() {
+        final String pkg = "package";
+
+        // Post AUTOGROUP_AT_COUNT ongoing notifications
+        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            notifications.add(sbn);
+        }
+
+        for (StatusBarNotification sbn: notifications) {
+            mGroupHelper.onNotificationPosted(sbn, false);
+        }
+
+        // add ongoing
+        StatusBarNotification sbn = getSbn(pkg, AUTOGROUP_AT_COUNT + 1, null, UserHandle.SYSTEM);
+        sbn.getNotification().flags |= FLAG_ONGOING_EVENT;
+        mGroupHelper.onNotificationPosted(sbn, true);
+
+        // Summary is now ongoing
+        verify(mCallback).updateAutogroupSummary(
+                anyInt(), anyString(), eq(BASE_FLAGS | FLAG_ONGOING_EVENT));
+    }
+
+    @Test
+    public void testAutoGrouped_singleOngoing_appGroupOngoingChild() {
+        final String pkg = "package";
+
+        // Post AUTOGROUP_AT_COUNT ongoing notifications
+        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            if (i == 0) {
+                sbn.getNotification().flags |= FLAG_ONGOING_EVENT;
+            }
+            notifications.add(sbn);
+        }
+
+        for (StatusBarNotification sbn: notifications) {
+            mGroupHelper.onNotificationPosted(sbn, false);
+        }
+
+        // app group the ongoing child
+        StatusBarNotification sbn = getSbn(pkg, 0, "0", UserHandle.SYSTEM, "app group now");
+        mGroupHelper.onNotificationPosted(sbn, true);
+
+        // Summary is no longer ongoing
+        verify(mCallback).updateAutogroupSummary(anyInt(), anyString(), eq(BASE_FLAGS));
+    }
+
+    @Test
+    public void testAutoGrouped_singleOngoing_removeNonOngoingChild() {
+        final String pkg = "package";
+
+        // Post AUTOGROUP_AT_COUNT ongoing notifications
+        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            if (i == 0) {
+                sbn.getNotification().flags |= FLAG_ONGOING_EVENT;
+            }
+            notifications.add(sbn);
+        }
+
+        for (StatusBarNotification sbn: notifications) {
+            mGroupHelper.onNotificationPosted(sbn, false);
+        }
+
+        // remove ongoing
+        mGroupHelper.onNotificationRemoved(notifications.get(1));
+
+        // Summary is still ongoing
+        verify(mCallback, never()).updateAutogroupSummary(anyInt(), anyString(), anyInt());
+    }
+
+    @Test
+    public void testAutoGrouped_allAutoCancel_updateChildNotAutoCancel() {
+        final String pkg = "package";
+
+        // Post AUTOGROUP_AT_COUNT ongoing notifications
+        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            sbn.getNotification().flags |= FLAG_AUTO_CANCEL;
+            notifications.add(sbn);
+        }
+
+        for (StatusBarNotification sbn: notifications) {
+            mGroupHelper.onNotificationPosted(sbn, false);
+        }
+
+        // One notification is no longer autocancelable
+        notifications.get(0).getNotification().flags &= ~FLAG_AUTO_CANCEL;
+        mGroupHelper.onNotificationPosted(notifications.get(0), true);
+
+        // Summary should no longer be autocancelable
+        verify(mCallback).updateAutogroupSummary(anyInt(), anyString(), eq(BASE_FLAGS));
+    }
+
+    @Test
+    public void testAutoGrouped_almostAllAutoCancel_updateChildAutoCancel() {
+        final String pkg = "package";
+
+        // Post AUTOGROUP_AT_COUNT ongoing notifications
+        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            if (i != 0) {
+                sbn.getNotification().flags |= FLAG_AUTO_CANCEL;
+            }
+            notifications.add(sbn);
+        }
+
+        for (StatusBarNotification sbn: notifications) {
+            mGroupHelper.onNotificationPosted(sbn, false);
+        }
+
+        // Missing notification is now autocancelable
+        notifications.get(0).getNotification().flags |= FLAG_AUTO_CANCEL;
+        mGroupHelper.onNotificationPosted(notifications.get(0), true);
+
+        // Summary should now autocancelable
+        verify(mCallback).updateAutogroupSummary(
+                anyInt(), anyString(), eq(BASE_FLAGS | FLAG_AUTO_CANCEL));
+    }
+
+    @Test
+    public void testAutoGrouped_allAutoCancel_updateChildAppGrouped() {
+        final String pkg = "package";
+
+        // Post AUTOGROUP_AT_COUNT ongoing notifications
+        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            sbn.getNotification().flags |= FLAG_AUTO_CANCEL;
+            notifications.add(sbn);
+        }
+
+        for (StatusBarNotification sbn: notifications) {
+            mGroupHelper.onNotificationPosted(sbn, false);
+        }
+
+        // One notification is now grouped by app
+        StatusBarNotification sbn = getSbn(pkg, 0, "0", UserHandle.SYSTEM, "app group now");
+        mGroupHelper.onNotificationPosted(sbn, true);
+
+        // Summary should be still be autocancelable
+        verify(mCallback, never()).updateAutogroupSummary(anyInt(), anyString(), anyInt());
+    }
+
+    @Test
+    public void testAutoGrouped_allAutoCancel_removeChild() {
+        final String pkg = "package";
+
+        // Post AUTOGROUP_AT_COUNT ongoing notifications
+        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
+        for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
+            StatusBarNotification sbn = getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM);
+            sbn.getNotification().flags |= FLAG_AUTO_CANCEL;
+            notifications.add(sbn);
+        }
+
+        for (StatusBarNotification sbn: notifications) {
+            mGroupHelper.onNotificationPosted(sbn, false);
         }
 
         mGroupHelper.onNotificationRemoved(notifications.get(0));
 
-        verify(mCallback, times(AUTOGROUP_AT_COUNT + 2))
-                .updateAutogroupSummary(anyInt(), anyString(), eq(true));
-
-        int userId = UserHandle.SYSTEM.getIdentifier();
-        assertEquals(mGroupHelper.getOngoingGroupCount(
-                userId, pkg), AUTOGROUP_AT_COUNT);
-    }
-
-
-    @Test
-    public void testAutoGroupCount_UpdateToNoneOngoingNotification() {
-        final String pkg = "package";
-        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
-        for (int i = 0; i < AUTOGROUP_AT_COUNT + 1; i++) {
-            notifications.add(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
-        }
-
-        for (StatusBarNotification sbn: notifications) {
-            sbn.setOverrideGroupKey(AUTOGROUP_KEY);
-        }
-
-        for (StatusBarNotification sbn: notifications) {
-            mGroupHelper.onNotificationPosted(sbn, true);
-        }
-
-        notifications.get(0).getNotification().flags |= Notification.FLAG_ONGOING_EVENT;
-        mGroupHelper.onNotificationUpdated(notifications.get(0));
-
-        verify(mCallback, times(1))
-                .updateAutogroupSummary(anyInt(), anyString(), eq(true));
-
-        int userId = UserHandle.SYSTEM.getIdentifier();
-        assertEquals(mGroupHelper.getOngoingGroupCount(
-                userId, pkg), 1);
+        // Summary should still be autocancelable
+        verify(mCallback, never()).updateAutogroupSummary(anyInt(), anyString(), anyInt());
     }
 
     @Test
-    public void testAutoGroupCount_AddOneOngoingNotification() {
-        final String pkg = "package";
-        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
-        for (int i = 0; i < AUTOGROUP_AT_COUNT + 1; i++) {
-            notifications.add(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
-        }
-        StatusBarNotification sbn = notifications.get(AUTOGROUP_AT_COUNT);
-        sbn.getNotification().flags |= Notification.FLAG_ONGOING_EVENT;
-        sbn.setOverrideGroupKey(AUTOGROUP_KEY);
-
-
-        for (StatusBarNotification current: notifications) {
-            mGroupHelper.onNotificationPosted(current, true);
-        }
-
-        verify(mCallback, times(1))
-                .updateAutogroupSummary(anyInt(), anyString(), eq(true));
-
-        int userId = UserHandle.SYSTEM.getIdentifier();
-        assertEquals(mGroupHelper.getOngoingGroupCount(
-                userId, pkg), 1);
-    }
-
-    @Test
-    public void testAutoGroupCount_UpdateNoneOngoing() {
-        final String pkg = "package";
-        ArrayList<StatusBarNotification>  notifications = new ArrayList<>();
-        for (int i = 0; i < AUTOGROUP_AT_COUNT + 1; i++) {
-            notifications.add(getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM));
-        }
-
-        for (StatusBarNotification sbn: notifications) {
-            sbn.setOverrideGroupKey(AUTOGROUP_KEY);
-        }
-
-        for (StatusBarNotification sbn: notifications) {
-            mGroupHelper.onNotificationPosted(sbn, true);
-        }
-
-        verify(mCallback, times(0))
-                .updateAutogroupSummary(anyInt(), anyString(), eq(true));
-
-        int userId = UserHandle.SYSTEM.getIdentifier();
-        assertEquals(mGroupHelper.getOngoingGroupCount(userId, pkg), 0);
-    }
-
-
-    @Test
-    public void testDropToZeroRemoveGroup() throws Exception {
+    public void testDropToZeroRemoveGroup() {
         final String pkg = "package";
         List<StatusBarNotification> posted = new ArrayList<>();
         for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
@@ -371,7 +564,8 @@
             posted.add(sbn);
             mGroupHelper.onNotificationPosted(sbn, false);
         }
-        verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString(), eq(false));
+        verify(mCallback, times(1)).addAutoGroupSummary(
+                anyInt(), eq(pkg), anyString(), eq(BASE_FLAGS));
         verify(mCallback, times(AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
@@ -390,7 +584,7 @@
     }
 
     @Test
-    public void testAppStartsGrouping() throws Exception {
+    public void testAppStartsGrouping() {
         final String pkg = "package";
         List<StatusBarNotification> posted = new ArrayList<>();
         for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
@@ -399,7 +593,7 @@
             mGroupHelper.onNotificationPosted(sbn, false);
         }
         verify(mCallback, times(1)).addAutoGroupSummary(
-                anyInt(), eq(pkg), anyString(), anyBoolean());
+                anyInt(), eq(pkg), anyString(), eq(BASE_FLAGS));
         verify(mCallback, times(AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
@@ -408,9 +602,10 @@
         for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
             final StatusBarNotification sbn =
                     getSbn(pkg, i, String.valueOf(i), UserHandle.SYSTEM, "app group");
-            mGroupHelper.onNotificationPosted(sbn, false);
+            sbn.setOverrideGroupKey("autogrouped");
+            mGroupHelper.onNotificationPosted(sbn, true);
             verify(mCallback, times(1)).removeAutoGroup(sbn.getKey());
-            if (i < AUTOGROUP_AT_COUNT -1) {
+            if (i < AUTOGROUP_AT_COUNT - 1) {
                 verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
             }
         }
@@ -418,8 +613,7 @@
     }
 
     @Test
-    public void testNewNotificationsAddedToAutogroup_ifOriginalNotificationsCanceled()
-            throws Exception {
+    public void testNewNotificationsAddedToAutogroup_ifOriginalNotificationsCanceled() {
         final String pkg = "package";
         List<StatusBarNotification> posted = new ArrayList<>();
         for (int i = 0; i < AUTOGROUP_AT_COUNT; i++) {
@@ -427,7 +621,8 @@
             posted.add(sbn);
             mGroupHelper.onNotificationPosted(sbn, false);
         }
-        verify(mCallback, times(1)).addAutoGroupSummary(anyInt(), eq(pkg), anyString(), eq(false));
+        verify(mCallback, times(1)).addAutoGroupSummary(
+                anyInt(), eq(pkg), anyString(), eq(BASE_FLAGS));
         verify(mCallback, times(AUTOGROUP_AT_COUNT)).addAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
@@ -441,10 +636,7 @@
         Mockito.reset(mCallback);
 
         // only one child remains
-        Map<String, LinkedHashSet<String>> ungroupedForUser =
-                mGroupHelper.mUngroupedNotifications.get(UserHandle.USER_SYSTEM);
-        assertNotNull(ungroupedForUser);
-        assertEquals(1, ungroupedForUser.get(pkg).size());
+        assertEquals(1, mGroupHelper.getNotGroupedByAppCount(UserHandle.USER_SYSTEM, pkg));
 
         // Add new notification; it should be autogrouped even though the total count is
         // < AUTOGROUP_AT_COUNT
@@ -454,5 +646,8 @@
         verify(mCallback, times(1)).addAutoGroup(sbn.getKey());
         verify(mCallback, never()).removeAutoGroup(anyString());
         verify(mCallback, never()).removeAutoGroupSummary(anyInt(), anyString());
+        verify(mCallback).updateAutogroupSummary(anyInt(), anyString(), eq(BASE_FLAGS));
+        verify(mCallback, never()).addAutoGroupSummary(
+                anyInt(), anyString(), anyString(), anyInt());
     }
 }
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java
index 8fcbf2f..541739d 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java
@@ -96,6 +96,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
 
 public class ManagedServicesTest extends UiServiceTestCase {
 
@@ -1920,6 +1921,18 @@
         assertTrue(service.isBound(cn_disallowed, 0));
     }
 
+    @Test
+    public void isComponentEnabledForCurrentProfiles_isThreadSafe() throws InterruptedException {
+        for (UserInfo userInfo : mUm.getUsers()) {
+            mService.addApprovedList("pkg1/cmp1:pkg2/cmp2:pkg3/cmp3", userInfo.id, true);
+        }
+        testThreadSafety(() -> {
+            mService.rebindServices(false, 0);
+            assertThat(mService.isComponentEnabledForCurrentProfiles(
+                    new ComponentName("pkg1", "cmp1"))).isTrue();
+        }, 20, 30);
+    }
+
     private void mockServiceInfoWithMetaData(List<ComponentName> componentNames,
             ManagedServices service, ArrayMap<ComponentName, Bundle> metaDatas)
             throws RemoteException {
@@ -2298,4 +2311,38 @@
             return false;
         }
     }
+
+    /**
+     * 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();
+    }
 }
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 eceb589..5dbc6ab 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -40,7 +40,6 @@
 import static android.app.NotificationManager.IMPORTANCE_LOW;
 import static android.app.NotificationManager.IMPORTANCE_MAX;
 import static android.app.NotificationManager.IMPORTANCE_NONE;
-import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
 import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CALLS;
 import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CONVERSATIONS;
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_AMBIENT;
@@ -358,7 +357,7 @@
     private static final int NOTIFICATION_LOCATION_UNKNOWN = 0;
 
     private static final String VALID_CONVO_SHORTCUT_ID = "shortcut";
-
+    private static final String SEARCH_SELECTOR_PKG = "searchSelector";
     @Mock
     private NotificationListeners mListeners;
     @Mock
@@ -549,6 +548,10 @@
         // apps allowed as convos
         mService.setStringArrayResourceValue(PKG_O);
 
+        TestableResources tr = mContext.getOrCreateTestableResources();
+        tr.addOverride(com.android.internal.R.string.config_defaultSearchSelectorPackageName,
+                SEARCH_SELECTOR_PKG);
+
         mWorkerHandler = spy(mService.new WorkerHandler(mTestableLooper.getLooper()));
         mService.init(mWorkerHandler, mRankingHandler, mPackageManager, mPackageManagerClient,
                 mockLightsManager, mListeners, mAssistants, mConditionProviders, mCompanionMgr,
@@ -754,13 +757,19 @@
 
     private NotificationRecord generateNotificationRecord(NotificationChannel channel, int id,
             String groupKey, boolean isSummary) {
+        return generateNotificationRecord(channel, id, "tag" + System.currentTimeMillis(), groupKey,
+                isSummary);
+    }
+
+    private NotificationRecord generateNotificationRecord(NotificationChannel channel, int id,
+            String tag, String groupKey, boolean isSummary) {
         Notification.Builder nb = new Notification.Builder(mContext, channel.getId())
                 .setContentTitle("foo")
                 .setSmallIcon(android.R.drawable.sym_def_app_icon)
                 .setGroup(groupKey)
                 .setGroupSummary(isSummary);
         StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, id,
-                "tag" + System.currentTimeMillis(), mUid, 0,
+                tag, mUid, 0,
                 nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0);
         return new NotificationRecord(mContext, sbn, channel);
     }
@@ -1899,7 +1908,8 @@
         mService.mSummaryByGroupKey.put("pkg", summary);
         mService.mAutobundledSummaries.put(0, new ArrayMap<>());
         mService.mAutobundledSummaries.get(0).put("pkg", summary.getKey());
-        mService.updateAutobundledSummaryFlags(0, "pkg", true, false);
+        mService.updateAutobundledSummaryFlags(
+                0, "pkg", GroupHelper.BASE_FLAGS | FLAG_ONGOING_EVENT, false);
 
         assertTrue(summary.getSbn().isOngoing());
     }
@@ -1915,7 +1925,7 @@
         mService.mAutobundledSummaries.get(0).put("pkg", summary.getKey());
         mService.mSummaryByGroupKey.put("pkg", summary);
 
-        mService.updateAutobundledSummaryFlags(0, "pkg", false, false);
+        mService.updateAutobundledSummaryFlags(0, "pkg", GroupHelper.BASE_FLAGS, false);
 
         assertFalse(summary.getSbn().isOngoing());
     }
@@ -2897,7 +2907,7 @@
         when(mPermissionHelper.isPermissionFixed(PKG, temp.getUserId())).thenReturn(true);
 
         NotificationRecord r = mService.createAutoGroupSummary(
-                temp.getUserId(), temp.getSbn().getPackageName(), temp.getKey(), false);
+                temp.getUserId(), temp.getSbn().getPackageName(), temp.getKey(), 0);
 
         assertThat(r.isImportanceFixed()).isTrue();
     }
@@ -4213,7 +4223,7 @@
     }
 
     @Test
-    public void testOnlyAutogroupIfGroupChanged_noPriorNoti_autogroups() throws Exception {
+    public void testOnlyAutogroupIfNeeded_newNotification_ghUpdate() {
         NotificationRecord r = generateNotificationRecord(mTestNotificationChannel, 0, null, false);
         mService.addEnqueuedNotification(r);
         NotificationManagerService.PostNotificationRunnable runnable =
@@ -4226,17 +4236,18 @@
     }
 
     @Test
-    public void testOnlyAutogroupIfGroupChanged_groupChanged_autogroups()
-            throws Exception {
-        NotificationRecord r =
-                generateNotificationRecord(mTestNotificationChannel, 0, "group", false);
+    public void testOnlyAutogroupIfNeeded_groupChanged_ghUpdate() {
+        NotificationRecord r = generateNotificationRecord(mTestNotificationChannel, 0,
+                "testOnlyAutogroupIfNeeded_groupChanged_ghUpdate", "group", false);
         mService.addNotification(r);
 
-        r = generateNotificationRecord(mTestNotificationChannel, 0, null, false);
-        mService.addEnqueuedNotification(r);
+        NotificationRecord update = generateNotificationRecord(mTestNotificationChannel, 0,
+                "testOnlyAutogroupIfNeeded_groupChanged_ghUpdate", null, false);
+        mService.addEnqueuedNotification(update);
         NotificationManagerService.PostNotificationRunnable runnable =
-                mService.new PostNotificationRunnable(r.getKey(), r.getSbn().getPackageName(),
-                        r.getUid(), SystemClock.elapsedRealtime());
+                mService.new PostNotificationRunnable(update.getKey(),
+                        update.getSbn().getPackageName(), update.getUid(),
+                        SystemClock.elapsedRealtime());
         runnable.run();
         waitForIdle();
 
@@ -4244,16 +4255,39 @@
     }
 
     @Test
-    public void testOnlyAutogroupIfGroupChanged_noGroupChanged_autogroups()
-            throws Exception {
-        NotificationRecord r = generateNotificationRecord(mTestNotificationChannel, 0, "group",
-                false);
+    public void testOnlyAutogroupIfNeeded_flagsChanged_ghUpdate() {
+        NotificationRecord r = generateNotificationRecord(mTestNotificationChannel, 0,
+                "testOnlyAutogroupIfNeeded_flagsChanged_ghUpdate", "group", false);
         mService.addNotification(r);
-        mService.addEnqueuedNotification(r);
+
+        NotificationRecord update = generateNotificationRecord(mTestNotificationChannel, 0,
+                "testOnlyAutogroupIfNeeded_flagsChanged_ghUpdate", null, false);
+        update.getNotification().flags = FLAG_AUTO_CANCEL;
+        mService.addEnqueuedNotification(update);
+        NotificationManagerService.PostNotificationRunnable runnable =
+                mService.new PostNotificationRunnable(update.getKey(),
+                        update.getSbn().getPackageName(), update.getUid(),
+                        SystemClock.elapsedRealtime());
+        runnable.run();
+        waitForIdle();
+
+        verify(mGroupHelper, times(1)).onNotificationPosted(any(), anyBoolean());
+    }
+
+    @Test
+    public void testOnlyAutogroupIfGroupChanged_noValidChange_noGhUpdate() {
+        NotificationRecord r = generateNotificationRecord(mTestNotificationChannel, 0,
+                "testOnlyAutogroupIfGroupChanged_noValidChange_noGhUpdate", null, false);
+        mService.addNotification(r);
+        NotificationRecord update = generateNotificationRecord(mTestNotificationChannel, 0,
+                "testOnlyAutogroupIfGroupChanged_noValidChange_noGhUpdate", null, false);
+        update.getNotification().color = Color.BLACK;
+        mService.addEnqueuedNotification(update);
 
         NotificationManagerService.PostNotificationRunnable runnable =
-                mService.new PostNotificationRunnable(r.getKey(), r.getSbn().getPackageName(),
-                        r.getUid(), SystemClock.elapsedRealtime());
+                mService.new PostNotificationRunnable(update.getKey(),
+                        update.getSbn().getPackageName(),
+                        update.getUid(), SystemClock.elapsedRealtime());
         runnable.run();
         waitForIdle();
 
@@ -5277,7 +5311,7 @@
         parser.setInput(new BufferedInputStream(
                 new ByteArrayInputStream(baos.toByteArray())), null);
         NotificationChannel restored = new NotificationChannel("a", "ab", IMPORTANCE_DEFAULT);
-        restored.populateFromXmlForRestore(parser, getContext());
+        restored.populateFromXmlForRestore(parser, true, getContext());
 
         assertNull(restored.getSound());
     }
@@ -5416,6 +5450,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");
 
@@ -10220,10 +10277,10 @@
 
         // grouphelper is a mock here, so make the calls it would make
 
-        // add summary; wait for it to be posted
-        mService.addAutoGroupSummary(nr1.getUserId(), nr1.getSbn().getPackageName(), nr1.getKey(),
-                true);
-        waitForIdle();
+        // add summary
+        mService.addNotification(mService.createAutoGroupSummary(nr1.getUserId(),
+                nr1.getSbn().getPackageName(), nr1.getKey(),
+                GroupHelper.BASE_FLAGS | FLAG_ONGOING_EVENT));
 
         // cancel both children
         mBinderService.cancelNotificationWithTag(PKG, PKG, nr0.getSbn().getTag(),
@@ -10232,9 +10289,7 @@
                 nr1.getSbn().getId(), nr1.getSbn().getUserId());
         waitForIdle();
 
-        // group helper would send 'remove flag' and then 'remove summary' events
-        mService.updateAutobundledSummaryFlags(nr1.getUserId(), nr1.getSbn().getPackageName(),
-                false, false);
+        // group helper would send 'remove summary' event
         mService.clearAutogroupSummaryLocked(nr1.getUserId(), nr1.getSbn().getPackageName());
         waitForIdle();
 
@@ -10584,6 +10639,34 @@
     }
 
     @Test
+    public void fixSystemNotification_defaultSearchSelectior_withOnGoingFlag_nondismissible()
+            throws Exception {
+        final ApplicationInfo ai = new ApplicationInfo();
+        ai.packageName = SEARCH_SELECTOR_PKG;
+        ai.uid = mUid;
+        ai.flags |= ApplicationInfo.FLAG_SYSTEM;
+
+        when(mPackageManagerClient.getApplicationInfoAsUser(anyString(), anyInt(), anyInt()))
+                .thenReturn(ai);
+        when(mAppOpsManager.checkOpNoThrow(
+                AppOpsManager.OP_SYSTEM_EXEMPT_FROM_DISMISSIBLE_NOTIFICATIONS, ai.uid,
+                ai.packageName)).thenReturn(AppOpsManager.MODE_IGNORED);
+        // Given: a notification from an app on the system partition has the flag
+        // FLAG_ONGOING_EVENT set
+        // feature flag: ALLOW_DISMISS_ONGOING is on
+        mTestFlagResolver.setFlagOverride(ALLOW_DISMISS_ONGOING, true);
+        Notification n = new Notification.Builder(mContext, "test")
+                .setOngoing(true)
+                .build();
+
+        // When: fix the notification with NotificationManagerService
+        mService.fixNotification(n, PKG, "tag", 9, 0, mUid, NOT_FOREGROUND_SERVICE, true);
+
+        // Then: the notification's flag FLAG_NO_DISMISS should be set
+        assertNotSame(0, n.flags & Notification.FLAG_NO_DISMISS);
+    }
+
+    @Test
     public void fixCallNotification_withOnGoingFlag_shouldNotBeNonDismissible()
             throws Exception {
         // Given: a call notification has the flag FLAG_ONGOING_EVENT set
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordExtractorDataTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordExtractorDataTest.java
index e6569f7..9fe0e49 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordExtractorDataTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordExtractorDataTest.java
@@ -98,6 +98,41 @@
     }
 
     @Test
+    public void testHasDiffs_autoBundled() {
+        NotificationRecord r = generateRecord();
+
+        NotificationRecordExtractorData extractorData = new NotificationRecordExtractorData(
+                1,
+                r.getPackageVisibilityOverride(),
+                r.canShowBadge(),
+                r.canBubble(),
+                r.getNotification().isBubbleNotification(),
+                r.getChannel(),
+                r.getGroupKey(),
+                r.getPeopleOverride(),
+                r.getSnoozeCriteria(),
+                r.getUserSentiment(),
+                r.getSuppressedVisualEffects(),
+                r.getSystemGeneratedSmartActions(),
+                r.getSmartReplies(),
+                r.getImportance(),
+                r.getRankingScore(),
+                r.isConversation(),
+                r.getProposedImportance(),
+                r.hasSensitiveContent());
+
+        Bundle signals = new Bundle();
+        signals.putString(Adjustment.KEY_GROUP_KEY, "ranker_group");
+        Adjustment adjustment = new Adjustment("pkg", r.getKey(), signals, "", 0);
+        r.addAdjustment(adjustment);
+        NotificationAdjustmentExtractor adjustmentExtractor = new NotificationAdjustmentExtractor();
+        adjustmentExtractor.process(r);
+
+        assertTrue(extractorData.hasDiffForRankingLocked(r, 1));
+        assertTrue(extractorData.hasDiffForLoggingLocked(r, 1));
+    }
+
+    @Test
     public void testHasDiffs_sensitiveContentChange() {
         NotificationRecord r = generateRecord();
 
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
index f6d10b9..c78b03e 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
@@ -140,6 +140,7 @@
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.ArrayList;
@@ -170,6 +171,12 @@
             Uri.parse("content://" + TEST_AUTHORITY
                     + "/internal/audio/media/10?title=Test&canonical=1");
 
+    private static final Uri ANDROID_RES_SOUND_URI =
+            Uri.parse("android.resource://" + TEST_AUTHORITY + "/raw/test");
+
+    private static final Uri FILE_SOUND_URI =
+            Uri.parse("file://" + TEST_AUTHORITY + "/product/media/test.ogg");
+
     @Mock PermissionHelper mPermissionHelper;
     @Mock RankingHandler mHandler;
     @Mock PackageManager mPm;
@@ -1338,6 +1345,57 @@
         assertEquals(Settings.System.DEFAULT_NOTIFICATION_URI, actualChannel.getSound());
     }
 
+    /**
+     * Test sound Uri restore retry behavior when channel is restored before package
+     *  and then package is installed.
+     */
+    @Test
+    public void testRestoreXml_withNonExistentCanonicalizedSoundUriAndMissingPackage()
+            throws Exception {
+        // canonicalization returns CANONICAL_SOUND_URI for getSoundForBackup (backup part)
+        doReturn(CANONICAL_SOUND_URI)
+                .when(mTestIContentProvider).canonicalize(any(), eq(SOUND_URI));
+
+        NotificationChannel channel =
+                new NotificationChannel("id", "name", IMPORTANCE_LOW);
+        channel.setSound(SOUND_URI, mAudioAttributes);
+        mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false);
+        ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true,
+                USER_SYSTEM, channel.getId());
+
+        // canonicalization / uncanonicalization returns null for the restore part
+        doReturn(null)
+                .when(mTestIContentProvider).canonicalize(any(), eq(CANONICAL_SOUND_URI));
+        doReturn(null)
+                .when(mTestIContentProvider).uncanonicalize(any(), any());
+
+        // simulate package not installed
+        when(mPm.getPackageUidAsUser(PKG_N_MR1, USER_SYSTEM)).thenReturn(UNKNOWN_UID);
+        when(mPm.getApplicationInfoAsUser(eq(PKG_N_MR1), anyInt(), anyInt())).thenThrow(
+                new PackageManager.NameNotFoundException());
+
+        loadStreamXml(baos, true, USER_SYSTEM);
+
+        // 1st restore pass fails
+        NotificationChannel actualChannel = mHelper.getNotificationChannel(
+                PKG_N_MR1, UNKNOWN_UID, channel.getId(), false);
+        // sound is CANONICAL_SOUND_URI, unchanged from backup
+        assertEquals(CANONICAL_SOUND_URI, actualChannel.getSound());
+        // sound is flagged as not restored
+        assertFalse(actualChannel.isSoundRestored());
+
+        // package is "installed"
+        when(mPm.getPackageUidAsUser(PKG_N_MR1, USER_SYSTEM)).thenReturn(UID_N_MR1);
+
+        // Trigger 2nd restore pass
+        mHelper.onPackagesChanged(false, USER_SYSTEM, new String[]{PKG_N_MR1},
+                new int[]{UID_N_MR1});
+
+        // sound is flagged as restored and set to default URI
+        assertEquals(Settings.System.DEFAULT_NOTIFICATION_URI, actualChannel.getSound());
+        assertTrue(actualChannel.isSoundRestored());
+    }
+
 
     /**
      * Although we don't make backups with uncanonicalized uris anymore, we used to, so we have to
@@ -1363,7 +1421,9 @@
                 backupWithUncanonicalizedSoundUri.getBytes(), true, USER_SYSTEM);
 
         NotificationChannel actualChannel = mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, id, false);
+
         assertEquals(Settings.System.DEFAULT_NOTIFICATION_URI, actualChannel.getSound());
+        assertTrue(actualChannel.isSoundRestored());
     }
 
     @Test
@@ -1389,6 +1449,73 @@
     }
 
     @Test
+    public void testBackupRestoreXml_withAndroidResourceSoundUri() throws Exception {
+        // Mock ContentResolver.getResourceId:
+        // throw exception on restore 1st pass => simulate app not installed yet
+        // then return a valid resource on package update => sim. app installed
+        ContentResolver contentResolver = mock(ContentResolver.class);
+        when(mContext.getContentResolver()).thenReturn(contentResolver);
+        ContentResolver.OpenResourceIdResult resId = mock(
+                ContentResolver.OpenResourceIdResult.class);
+        when(contentResolver.getResourceId(ANDROID_RES_SOUND_URI)).thenReturn(resId).thenThrow(
+                new FileNotFoundException("")).thenReturn(resId);
+
+        mHelper = new PreferencesHelper(mContext, mPm, mHandler, mMockZenModeHelper,
+                mPermissionHelper, mLogger, mAppOpsManager, mStatsEventBuilderFactory, false);
+
+        NotificationChannel channel =
+                new NotificationChannel("id", "name", IMPORTANCE_LOW);
+        channel.setSound(ANDROID_RES_SOUND_URI, mAudioAttributes);
+        mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false);
+        ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true,
+                USER_SYSTEM, channel.getId());
+
+        // simulate package not installed
+        when(mPm.getPackageUidAsUser(PKG_N_MR1, USER_SYSTEM)).thenReturn(UNKNOWN_UID);
+        when(mPm.getApplicationInfoAsUser(eq(PKG_N_MR1), anyInt(), anyInt())).thenThrow(
+                new PackageManager.NameNotFoundException());
+
+        loadStreamXml(baos, true, USER_SYSTEM);
+
+        NotificationChannel actualChannel = mHelper.getNotificationChannel(
+                PKG_N_MR1, UNKNOWN_UID, channel.getId(), false);
+        // sound is ANDROID_RES_SOUND_URI, unchanged from backup
+        assertEquals(ANDROID_RES_SOUND_URI, actualChannel.getSound());
+        // sound is flagged as not restored
+        assertFalse(actualChannel.isSoundRestored());
+
+        // package is "installed"
+        when(mPm.getPackageUidAsUser(PKG_N_MR1, USER_SYSTEM)).thenReturn(UID_N_MR1);
+
+        // Trigger 2nd restore pass
+        mHelper.onPackagesChanged(false, USER_SYSTEM, new String[]{PKG_N_MR1},
+                new int[]{UID_N_MR1});
+
+        // sound is flagged as restored
+        assertEquals(ANDROID_RES_SOUND_URI, actualChannel.getSound());
+        assertTrue(actualChannel.isSoundRestored());
+    }
+
+    @Test
+    public void testBackupRestoreXml_withFileResourceSoundUri() throws Exception {
+        NotificationChannel channel =
+                new NotificationChannel("id", "name", IMPORTANCE_LOW);
+        channel.setSound(FILE_SOUND_URI, mAudioAttributes);
+        mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false);
+        ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true,
+                USER_SYSTEM, channel.getId());
+
+        loadStreamXml(baos, true, USER_SYSTEM);
+
+        NotificationChannel actualChannel = mHelper.getNotificationChannel(
+                PKG_N_MR1, UID_N_MR1, channel.getId(), false);
+        // sound is FILE_SOUND_URI, unchanged from backup
+        assertEquals(FILE_SOUND_URI, actualChannel.getSound());
+        // sound is flagged as restored
+        assertTrue(actualChannel.isSoundRestored());
+    }
+
+    @Test
     public void testChannelXml_backup() throws Exception {
         NotificationChannelGroup ncg = new NotificationChannelGroup("1", "bye");
         NotificationChannelGroup ncg2 = new NotificationChannelGroup("2", "hello");
diff --git a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerDuplicateModelHandlerTest.java b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerDuplicateModelHandlerTest.java
new file mode 100644
index 0000000..bc94dac
--- /dev/null
+++ b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerDuplicateModelHandlerTest.java
@@ -0,0 +1,335 @@
+/*
+ * 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.server.soundtrigger_middleware;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThrows;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
+import android.media.soundtrigger.ModelParameterRange;
+import android.media.soundtrigger.Phrase;
+import android.media.soundtrigger.PhraseSoundModel;
+import android.media.soundtrigger.Properties;
+import android.media.soundtrigger.RecognitionConfig;
+import android.media.soundtrigger.RecognitionMode;
+import android.media.soundtrigger.SoundModel;
+import android.media.soundtrigger.SoundModelType;
+import android.media.soundtrigger.Status;
+import android.os.IBinder;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.InOrder;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(JUnit4.class)
+public final class SoundTriggerDuplicateModelHandlerTest {
+    // Component under test
+    private SoundTriggerDuplicateModelHandler mComponent;
+
+    private static final String DUPLICATE_UUID = "abcddead-beef-0123-3210-0123456789ab";
+    private static final String DIFFERENT_UUID = "0000dead-beef-0123-3210-0123456789ab";
+
+    @Mock private ISoundTriggerHal mUnderlying;
+    @Mock private ISoundTriggerHal.GlobalCallback mGlobalCallback;
+    @Mock private ISoundTriggerHal.ModelCallback mModelCallback;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mComponent = new SoundTriggerDuplicateModelHandler(mUnderlying);
+        doNothing().when(mUnderlying).registerCallback(any());
+        mComponent.registerCallback(mGlobalCallback);
+        verify(mUnderlying).registerCallback(eq(mGlobalCallback));
+    }
+
+    @Test
+    public void loadSoundModel_throwsResourceContention_whenDuplicateUuid() {
+        final var soundModel = createSoundModelOne();
+        final var soundModelSameUuid = createSoundModelTwo();
+        // First sound model load should complete successfully
+        mComponent.loadSoundModel(soundModel, mModelCallback);
+        verify(mUnderlying).loadSoundModel(eq(soundModel), eq(mModelCallback));
+        assertEquals(
+                assertThrows(
+                                RecoverableException.class,
+                                () -> mComponent.loadSoundModel(soundModelSameUuid, mModelCallback))
+                        .errorCode,
+                Status.RESOURCE_CONTENTION);
+        // Model has not been unloaded, so we don't get a callback
+        verify(mGlobalCallback, never()).onResourcesAvailable();
+        verifyNoMoreInteractions(mUnderlying);
+        verifyNoMoreInteractions(mGlobalCallback);
+    }
+
+    @Test
+    public void loadSoundModel_doesNotThrowResourceContention_whenDifferentUuid() {
+        final var soundModel = createSoundModelOne();
+        // Make all other fields the same
+        final var soundModelDifferentUuid = createSoundModelOne();
+        soundModelDifferentUuid.uuid = DIFFERENT_UUID;
+        InOrder inOrder = Mockito.inOrder(mUnderlying);
+        // First sound model load should complete successfully
+        mComponent.loadSoundModel(soundModel, mModelCallback);
+        inOrder.verify(mUnderlying).loadSoundModel(eq(soundModel), eq(mModelCallback));
+        mComponent.loadSoundModel(soundModelDifferentUuid, mModelCallback);
+        inOrder.verify(mUnderlying).loadSoundModel(eq(soundModelDifferentUuid), eq(mModelCallback));
+        // No contention, so we don't get a callback
+        verify(mGlobalCallback, never()).onResourcesAvailable();
+        verifyNoMoreInteractions(mUnderlying);
+        verifyNoMoreInteractions(mGlobalCallback);
+    }
+
+    @Test
+    public void loadSoundModel_doesNotThrow_afterDuplicateUuidHasBeenUnloaded() {
+        final var soundModel = createSoundModelOne();
+        // First sound model load should complete successfully
+        int handle = mComponent.loadSoundModel(soundModel, mModelCallback);
+        verify(mUnderlying).loadSoundModel(eq(soundModel), eq(mModelCallback));
+        // Unload model should complete successfully
+        mComponent.unloadSoundModel(handle);
+        verify(mUnderlying).unloadSoundModel(eq(handle));
+        // Since the model with the same UUID was unloaded, the subsequent load model
+        // should succeed.
+        mComponent.loadSoundModel(soundModel, mModelCallback);
+        verify(mUnderlying, times(2)).loadSoundModel(eq(soundModel), eq(mModelCallback));
+        verifyNoMoreInteractions(mUnderlying);
+        verifyNoMoreInteractions(mGlobalCallback);
+    }
+
+    @Test
+    public void unloadSoundModel_triggersResourceCallback_afterDuplicateUuidRejected() {
+        final var soundModel = createSoundModelOne();
+        final var soundModelSameUuid = createSoundModelTwo();
+        // First sound model load should complete successfully
+        int handle = mComponent.loadSoundModel(soundModel, mModelCallback);
+        verify(mUnderlying).loadSoundModel(eq(soundModel), eq(mModelCallback));
+        assertEquals(
+                assertThrows(
+                                RecoverableException.class,
+                                () -> mComponent.loadSoundModel(soundModelSameUuid, mModelCallback))
+                        .errorCode,
+                Status.RESOURCE_CONTENTION);
+        mComponent.unloadSoundModel(handle);
+        verify(mUnderlying).unloadSoundModel(eq(handle));
+        verify(mGlobalCallback).onResourcesAvailable();
+        verifyNoMoreInteractions(mUnderlying);
+        verifyNoMoreInteractions(mGlobalCallback);
+    }
+
+    // Next tests are same as above, but for phrase sound model.
+    @Test
+    public void loadPhraseSoundModel_throwsResourceContention_whenDuplicateUuid() {
+        final var soundModel = createPhraseSoundModelOne();
+        final var soundModelSameUuid = createPhraseSoundModelTwo();
+        // First sound model load should complete successfully
+        mComponent.loadPhraseSoundModel(soundModel, mModelCallback);
+        verify(mUnderlying).loadPhraseSoundModel(eq(soundModel), eq(mModelCallback));
+        assertEquals(
+                assertThrows(
+                                RecoverableException.class,
+                                () ->
+                                        mComponent.loadPhraseSoundModel(
+                                                soundModelSameUuid, mModelCallback))
+                        .errorCode,
+                Status.RESOURCE_CONTENTION);
+        // Model has not been unloaded, so we don't get a callback
+        verify(mGlobalCallback, never()).onResourcesAvailable();
+        verifyNoMoreInteractions(mUnderlying);
+        verifyNoMoreInteractions(mGlobalCallback);
+    }
+
+    @Test
+    public void loadPhraseSoundModel_doesNotThrowResourceContention_whenDifferentUuid() {
+        final var soundModel = createPhraseSoundModelOne();
+        // Make all other fields the same
+        final var soundModelDifferentUuid = createPhraseSoundModelOne();
+        soundModelDifferentUuid.common.uuid = DIFFERENT_UUID;
+        InOrder inOrder = Mockito.inOrder(mUnderlying);
+        // First sound model load should complete successfully
+        mComponent.loadPhraseSoundModel(soundModel, mModelCallback);
+        inOrder.verify(mUnderlying).loadPhraseSoundModel(eq(soundModel), eq(mModelCallback));
+        mComponent.loadPhraseSoundModel(soundModelDifferentUuid, mModelCallback);
+        inOrder.verify(mUnderlying).loadPhraseSoundModel(eq(soundModelDifferentUuid),
+                eq(mModelCallback));
+        // No contention, so we don't get a callback
+        verify(mGlobalCallback, never()).onResourcesAvailable();
+        verifyNoMoreInteractions(mUnderlying);
+        verifyNoMoreInteractions(mGlobalCallback);
+    }
+
+    @Test
+    public void loadPhraseSoundModel_doesNotThrow_afterDuplicateUuidHasBeenUnloaded() {
+        final var soundModel = createPhraseSoundModelOne();
+        // First sound model load should complete successfully
+        int handle = mComponent.loadPhraseSoundModel(soundModel, mModelCallback);
+        verify(mUnderlying).loadPhraseSoundModel(eq(soundModel), eq(mModelCallback));
+        // Unload model should complete successfully
+        mComponent.unloadSoundModel(handle);
+        verify(mUnderlying).unloadSoundModel(eq(handle));
+        // Since the model with the same UUID was unloaded, the subsequent load model
+        // should succeed.
+        mComponent.loadPhraseSoundModel(soundModel, mModelCallback);
+        verify(mUnderlying, times(2)).loadPhraseSoundModel(eq(soundModel), eq(mModelCallback));
+        verifyNoMoreInteractions(mUnderlying);
+        verifyNoMoreInteractions(mGlobalCallback);
+    }
+
+    @Test
+    public void unloadSoundModel_triggersResourceCallback_afterDuplicateUuidRejectedPhrase() {
+        final var soundModel = createPhraseSoundModelOne();
+        final var soundModelSameUuid = createPhraseSoundModelTwo();
+        // First sound model load should complete successfully
+        int handle = mComponent.loadPhraseSoundModel(soundModel, mModelCallback);
+        verify(mUnderlying).loadPhraseSoundModel(eq(soundModel), eq(mModelCallback));
+        assertEquals(
+                assertThrows(
+                                RecoverableException.class,
+                                () ->
+                                        mComponent.loadPhraseSoundModel(
+                                                soundModelSameUuid, mModelCallback))
+                        .errorCode,
+                Status.RESOURCE_CONTENTION);
+        mComponent.unloadSoundModel(handle);
+        verify(mUnderlying).unloadSoundModel(eq(handle));
+        verify(mGlobalCallback).onResourcesAvailable();
+        verifyNoMoreInteractions(mUnderlying);
+        verifyNoMoreInteractions(mGlobalCallback);
+    }
+
+    @Test
+    public void testDelegation() {
+        // Test that the rest of the interface delegates its calls to the underlying object
+        // appropriately.
+        // This test method does not test load/unloadSoundModel
+        var properties = new Properties();
+        InOrder inOrder = Mockito.inOrder(mUnderlying);
+        doReturn(properties).when(mUnderlying).getProperties();
+        assertEquals(mComponent.getProperties(), properties);
+        inOrder.verify(mUnderlying).getProperties();
+        var mockGlobalCallback = mock(ISoundTriggerHal.GlobalCallback.class);
+        mComponent.registerCallback(mockGlobalCallback);
+        inOrder.verify(mUnderlying).registerCallback(eq(mockGlobalCallback));
+        int modelId = 5;
+        int deviceHandle = 2;
+        int ioHandle = 3;
+        var config = mock(RecognitionConfig.class);
+        mComponent.startRecognition(modelId, deviceHandle, ioHandle, config);
+        inOrder.verify(mUnderlying)
+                .startRecognition(eq(modelId), eq(deviceHandle), eq(ioHandle), eq(config));
+
+        mComponent.stopRecognition(modelId);
+        inOrder.verify(mUnderlying).stopRecognition(eq(modelId));
+        mComponent.forceRecognitionEvent(modelId);
+        inOrder.verify(mUnderlying).forceRecognitionEvent(eq(modelId));
+        int param = 10;
+        int value = 50;
+        var modelParamRange = new ModelParameterRange();
+        doReturn(modelParamRange).when(mUnderlying).queryParameter(anyInt(), anyInt());
+        assertEquals(mComponent.queryParameter(param, value), modelParamRange);
+        inOrder.verify(mUnderlying).queryParameter(param, value);
+        doReturn(value).when(mUnderlying).getModelParameter(anyInt(), anyInt());
+        assertEquals(mComponent.getModelParameter(modelId, param), value);
+        inOrder.verify(mUnderlying).getModelParameter(eq(modelId), eq(param));
+        mComponent.setModelParameter(modelId, param, value);
+        inOrder.verify(mUnderlying).setModelParameter(eq(modelId), eq(param), eq(value));
+        var recipient = mock(IBinder.DeathRecipient.class);
+        mComponent.linkToDeath(recipient);
+        inOrder.verify(mUnderlying).linkToDeath(eq(recipient));
+        mComponent.unlinkToDeath(recipient);
+        inOrder.verify(mUnderlying).unlinkToDeath(eq(recipient));
+        mComponent.flushCallbacks();
+        inOrder.verify(mUnderlying).flushCallbacks();
+        var token = mock(IBinder.class);
+        mComponent.clientAttached(token);
+        inOrder.verify(mUnderlying).clientAttached(eq(token));
+        mComponent.clientDetached(token);
+        inOrder.verify(mUnderlying).clientDetached(eq(token));
+        mComponent.reboot();
+        inOrder.verify(mUnderlying).reboot();
+        mComponent.detach();
+        inOrder.verify(mUnderlying).detach();
+        verifyNoMoreInteractions(mUnderlying);
+        verifyNoMoreInteractions(mGlobalCallback);
+    }
+
+    private static SoundModel createSoundModelOne() {
+        SoundModel model = new SoundModel();
+        model.type = SoundModelType.GENERIC;
+        model.uuid = DUPLICATE_UUID;
+        model.vendorUuid = "87654321-5432-6543-7654-456789fedcba";
+        byte[] data = new byte[] {91, 92, 93, 94, 95};
+        model.data = TestUtil.byteArrayToParcelFileDescriptor(data);
+        model.dataSize = data.length;
+        return model;
+    }
+
+    // Different except for the same UUID
+    private static SoundModel createSoundModelTwo() {
+        SoundModel model = new SoundModel();
+        model.type = SoundModelType.GENERIC;
+        model.uuid = DUPLICATE_UUID;
+        model.vendorUuid = "12345678-9876-5432-1012-345678901234";
+        byte[] data = new byte[] {19, 18, 17, 16};
+        model.data = TestUtil.byteArrayToParcelFileDescriptor(data);
+        model.dataSize = data.length;
+        return model;
+    }
+
+    private static PhraseSoundModel createPhraseSoundModelOne() {
+        PhraseSoundModel model = new PhraseSoundModel();
+        model.common = createSoundModelOne();
+        model.common.type = SoundModelType.KEYPHRASE;
+        model.phrases = new Phrase[1];
+        model.phrases[0] = new Phrase();
+        model.phrases[0].id = 123;
+        model.phrases[0].users = new int[] {5, 6, 7};
+        model.phrases[0].locale = "locale";
+        model.phrases[0].text = "text";
+        model.phrases[0].recognitionModes =
+                RecognitionMode.USER_AUTHENTICATION | RecognitionMode.USER_IDENTIFICATION;
+        return model;
+    }
+
+    private static PhraseSoundModel createPhraseSoundModelTwo() {
+        PhraseSoundModel model = new PhraseSoundModel();
+        model.common = createSoundModelTwo();
+        model.common.type = SoundModelType.KEYPHRASE;
+        model.phrases = new Phrase[1];
+        model.phrases[0] = new Phrase();
+        model.phrases[0].id = 321;
+        model.phrases[0].users = new int[] {4, 3, 2, 1};
+        model.phrases[0].locale = "differentLocale";
+        model.phrases[0].text = "differentText";
+        model.phrases[0].recognitionModes = 0;
+        return model;
+    }
+}
diff --git a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/TestUtil.java b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/TestUtil.java
index 39561f7..3b7bc95 100644
--- a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/TestUtil.java
+++ b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/TestUtil.java
@@ -466,7 +466,7 @@
         assertEquals(43, event.phraseExtras[0].levels[0].levelPercent);
     }
 
-    private static ParcelFileDescriptor byteArrayToParcelFileDescriptor(byte[] data) {
+    static ParcelFileDescriptor byteArrayToParcelFileDescriptor(byte[] data) {
         try (SharedMemory shmem = SharedMemory.create("", data.length)) {
             ByteBuffer buffer = shmem.mapReadWrite();
             buffer.put(data);
diff --git a/services/tests/wmtests/AndroidManifest.xml b/services/tests/wmtests/AndroidManifest.xml
index 2696d2b..fe7cd4a 100644
--- a/services/tests/wmtests/AndroidManifest.xml
+++ b/services/tests/wmtests/AndroidManifest.xml
@@ -87,6 +87,14 @@
                   android:showWhenLocked="true"/>
         <activity android:name="android.view.cts.surfacevalidator.CapturedActivity"/>
 
+        <activity android:name="com.android.server.wm.SurfaceControlViewHostTests$TestActivity" />
+
+        <activity android:name="android.server.wm.scvh.SurfaceSyncGroupActivity"
+            android:screenOrientation="locked"
+            android:turnScreenOn="true"
+            android:theme="@style/WhiteBackgroundTheme"
+            android:exported="true"/>
+
         <service android:name="android.view.cts.surfacevalidator.LocalMediaProjectionService"
             android:foregroundServiceType="mediaProjection"
             android:enabled="true">
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/RecentsAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
index c131c84..7092b0b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
@@ -104,7 +104,6 @@
         when(mMockRunner.asBinder()).thenReturn(new Binder());
         mController = spy(new RecentsAnimationController(mWm, mMockRunner, mAnimationCallbacks,
                 DEFAULT_DISPLAY));
-        mController.mShouldAttachNavBarToAppDuringTransition = false;
         mRootHomeTask = mDefaultDisplay.getDefaultTaskDisplayArea().getRootHomeTask();
         assertNotNull(mRootHomeTask);
     }
@@ -814,13 +813,13 @@
     }
 
     private void setupForShouldAttachNavBarDuringTransition() {
-        mController.mShouldAttachNavBarToAppDuringTransition = true;
         final WindowState navBar = spy(createWindow(null, TYPE_NAVIGATION_BAR, "NavigationBar"));
         mDefaultDisplay.getDisplayPolicy().addWindowLw(navBar, navBar.mAttrs);
         mWm.setRecentsAnimationController(mController);
         doReturn(navBar).when(mController).getNavigationBarWindow();
         final DisplayPolicy displayPolicy = spy(mDefaultDisplay.getDisplayPolicy());
         doReturn(displayPolicy).when(mDefaultDisplay).getDisplayPolicy();
+        doReturn(true).when(displayPolicy).shouldAttachNavBarToAppDuringTransition();
     }
 
     private static void initializeRecentsAnimationController(RecentsAnimationController controller,
diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java
new file mode 100644
index 0000000..41bfc80
--- /dev/null
+++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java
@@ -0,0 +1,194 @@
+/*
+ * 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 static android.Manifest.permission.ACCESS_SURFACE_FLINGER;
+import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;
+import static android.server.wm.CtsWindowInfoUtils.waitForWindowVisible;
+import static android.server.wm.CtsWindowInfoUtils.waitForWindowFocus;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
+
+import static org.junit.Assert.assertTrue;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.res.Configuration;
+import android.graphics.Color;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.platform.test.annotations.Presubmit;
+import android.view.Gravity;
+import android.view.IWindow;
+import android.view.SurfaceControl;
+import android.view.SurfaceControlViewHost;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+import android.view.View;
+import android.view.WindowManager;
+import android.view.WindowManagerGlobal;
+import android.view.WindowlessWindowManager;
+import android.widget.Button;
+import android.widget.FrameLayout;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.rule.ActivityTestRule;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CountDownLatch;
+
+@Presubmit
+@SmallTest
+@RunWith(WindowTestRunner.class)
+public class SurfaceControlViewHostTests {
+    private final ActivityTestRule<TestActivity> mActivityRule = new ActivityTestRule<>(
+            TestActivity.class);
+    private Instrumentation mInstrumentation;
+    private TestActivity mActivity;
+
+    private View mView1;
+    private View mView2;
+    private SurfaceControlViewHost mScvh1;
+    private SurfaceControlViewHost mScvh2;
+
+    @Before
+    public void setUp() throws Exception {
+        mInstrumentation = InstrumentationRegistry.getInstrumentation();
+
+        // ACCESS_SURFACE_FLINGER is necessary to call waitForWindow
+        // INTERNAL_SYSTEM_WINDOW is necessary to add SCVH with no host parent
+        mInstrumentation.getUiAutomation().adoptShellPermissionIdentity(ACCESS_SURFACE_FLINGER,
+                INTERNAL_SYSTEM_WINDOW);
+        mActivity = mActivityRule.launchActivity(null);
+    }
+
+    @After
+    public void tearDown() {
+        mInstrumentation.getUiAutomation().dropShellPermissionIdentity();
+    }
+
+    @Test
+    public void requestFocusWithMultipleWindows() throws InterruptedException, RemoteException {
+        SurfaceControl sc = new SurfaceControl.Builder()
+                .setName("SurfaceControlViewHostTests")
+                .setCallsite("requestFocusWithMultipleWindows")
+                .build();
+        mView1 = new Button(mActivity);
+        mView2 = new Button(mActivity);
+
+        mActivity.runOnUiThread(() -> {
+            TestWindowlessWindowManager wwm = new TestWindowlessWindowManager(
+                    mActivity.getResources().getConfiguration(), sc, null);
+
+            try {
+                mActivity.attachToSurfaceView(sc);
+            } catch (InterruptedException e) {
+            }
+
+            mScvh1 = new SurfaceControlViewHost(mActivity, mActivity.getDisplay(),
+                    wwm, "requestFocusWithMultipleWindows");
+            mScvh2 = new SurfaceControlViewHost(mActivity, mActivity.getDisplay(),
+                    wwm, "requestFocusWithMultipleWindows");
+
+
+            mView1.setBackgroundColor(Color.RED);
+            mView2.setBackgroundColor(Color.BLUE);
+
+            WindowManager.LayoutParams lp1 = new WindowManager.LayoutParams(200, 200,
+                    TYPE_APPLICATION, 0, PixelFormat.OPAQUE);
+            WindowManager.LayoutParams lp2 = new WindowManager.LayoutParams(100, 100,
+                    TYPE_APPLICATION, 0, PixelFormat.OPAQUE);
+            mScvh1.setView(mView1, lp1);
+            mScvh2.setView(mView2, lp2);
+        });
+
+        assertTrue("Failed to wait for view1", waitForWindowVisible(mView1));
+        assertTrue("Failed to wait for view2", waitForWindowVisible(mView2));
+
+        WindowManagerGlobal.getWindowSession().grantEmbeddedWindowFocus(null /* window */,
+                mScvh1.getFocusGrantToken(), true);
+        assertTrue("Failed to gain focus for view1", waitForWindowFocus(mView1, true));
+
+        WindowManagerGlobal.getWindowSession().grantEmbeddedWindowFocus(null /* window */,
+                mScvh2.getFocusGrantToken(), true);
+        assertTrue("Failed to gain focus for view2", waitForWindowFocus(mView2, true));
+    }
+
+    private static class TestWindowlessWindowManager extends WindowlessWindowManager {
+        private final SurfaceControl mRoot;
+
+        TestWindowlessWindowManager(Configuration c, SurfaceControl rootSurface,
+                IBinder hostInputToken) {
+            super(c, rootSurface, hostInputToken);
+            mRoot = rootSurface;
+        }
+
+        @Override
+        protected SurfaceControl getParentSurface(IWindow window,
+                WindowManager.LayoutParams attrs) {
+            return mRoot;
+        }
+    }
+
+    public static class TestActivity extends Activity implements SurfaceHolder.Callback {
+        private SurfaceView mSurfaceView;
+        private final CountDownLatch mSvReadyLatch = new CountDownLatch(1);
+
+        @Override
+        protected void onCreate(@Nullable Bundle savedInstanceState) {
+            super.onCreate(savedInstanceState);
+            final FrameLayout content = new FrameLayout(this);
+            mSurfaceView = new SurfaceView(this);
+            mSurfaceView.setBackgroundColor(Color.BLACK);
+            mSurfaceView.setZOrderOnTop(true);
+            final FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(500, 500,
+                    Gravity.LEFT | Gravity.TOP);
+            content.addView(mSurfaceView, lp);
+            setContentView(content);
+            mSurfaceView.getHolder().addCallback(this);
+        }
+
+        @Override
+        public void surfaceCreated(@NonNull SurfaceHolder holder) {
+            mSvReadyLatch.countDown();
+        }
+
+        @Override
+        public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width,
+                int height) {
+        }
+
+        @Override
+        public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
+        }
+
+        public void attachToSurfaceView(SurfaceControl sc) throws InterruptedException {
+            mSvReadyLatch.await();
+            new SurfaceControl.Transaction().reparent(sc, mSurfaceView.getSurfaceControl())
+                    .show(sc).apply();
+        }
+    }
+}
+
diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceSyncGroupTests.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceSyncGroupTests.java
new file mode 100644
index 0000000..9db647a
--- /dev/null
+++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceSyncGroupTests.java
@@ -0,0 +1,187 @@
+/*
+ * 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 static android.window.SurfaceSyncGroup.TRANSACTION_READY_TIMEOUT;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import android.app.Instrumentation;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.graphics.PixelFormat;
+import android.graphics.Rect;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.platform.test.annotations.Presubmit;
+import android.server.wm.scvh.SurfaceSyncGroupActivity;
+import android.view.SurfaceControl;
+import android.view.View;
+import android.view.ViewTreeObserver;
+import android.view.WindowManager;
+import android.view.cts.surfacevalidator.BitmapPixelChecker;
+import android.window.SurfaceSyncGroup;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.rule.ActivityTestRule;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+@Presubmit
+public class SurfaceSyncGroupTests {
+    private static final String TAG = "SurfaceSyncGroupTests";
+
+    @Rule
+    public ActivityTestRule<SurfaceSyncGroupActivity> mActivityRule = new ActivityTestRule<>(
+            SurfaceSyncGroupActivity.class);
+
+    private SurfaceSyncGroupActivity mActivity;
+
+    Instrumentation mInstrumentation;
+
+    private final HandlerThread mHandlerThread = new HandlerThread("applyTransaction");
+    private Handler mHandler;
+
+    @Before
+    public void setup() {
+        mActivity = mActivityRule.getActivity();
+        mInstrumentation = InstrumentationRegistry.getInstrumentation();
+        mHandlerThread.start();
+        mHandler = mHandlerThread.getThreadHandler();
+    }
+
+    @Test
+    public void testOverlappingSyncsEnsureOrder_WhenTimeout() throws InterruptedException {
+        WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+        params.format = PixelFormat.TRANSLUCENT;
+
+        CountDownLatch secondDrawCompleteLatch = new CountDownLatch(1);
+        CountDownLatch bothSyncGroupsComplete = new CountDownLatch(2);
+        final SurfaceSyncGroup firstSsg = new SurfaceSyncGroup(TAG + "-first");
+        final SurfaceSyncGroup secondSsg = new SurfaceSyncGroup(TAG + "-second");
+        final SurfaceSyncGroup infiniteSsg = new SurfaceSyncGroup(TAG + "-infinite");
+
+        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+        t.addTransactionCommittedListener(Runnable::run, bothSyncGroupsComplete::countDown);
+        firstSsg.addTransaction(t);
+
+        View backgroundView = mActivity.getBackgroundView();
+        firstSsg.add(backgroundView.getRootSurfaceControl(),
+                () -> mActivity.runOnUiThread(() -> backgroundView.setBackgroundColor(Color.RED)));
+
+        addSecondSyncGroup(secondSsg, secondDrawCompleteLatch, bothSyncGroupsComplete);
+
+        assertTrue("Failed to draw two frames",
+                secondDrawCompleteLatch.await(5, TimeUnit.SECONDS));
+
+        mHandler.postDelayed(() -> {
+            // Don't add a markSyncReady for the first sync group until after it's added to another
+            // SSG to ensure the timeout is longer than the second frame's timeout. The infinite SSG
+            // will never complete to ensure it reaches the timeout, but only after the second SSG
+            // had a chance to reach its timeout.
+            infiniteSsg.add(firstSsg, null /* runnable */);
+            firstSsg.markSyncReady();
+        }, 200);
+
+        assertTrue("Failed to wait for both SurfaceSyncGroups to apply",
+                bothSyncGroupsComplete.await(5, TimeUnit.SECONDS));
+
+        validateScreenshot();
+    }
+
+    @Test
+    public void testOverlappingSyncsEnsureOrder_WhileHoldingTransaction()
+            throws InterruptedException {
+        WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+        params.format = PixelFormat.TRANSLUCENT;
+
+        CountDownLatch secondDrawCompleteLatch = new CountDownLatch(1);
+        CountDownLatch bothSyncGroupsComplete = new CountDownLatch(2);
+
+        final SurfaceSyncGroup firstSsg = new SurfaceSyncGroup(TAG + "-first",
+                transaction -> mHandler.postDelayed(() -> {
+                    try {
+                        assertTrue("Failed to draw two frames",
+                                secondDrawCompleteLatch.await(5, TimeUnit.SECONDS));
+                    } catch (InterruptedException e) {
+                        throw new RuntimeException(e);
+                    }
+                    transaction.apply();
+                }, TRANSACTION_READY_TIMEOUT + 200));
+        final SurfaceSyncGroup secondSsg = new SurfaceSyncGroup(TAG + "-second");
+
+        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+        t.addTransactionCommittedListener(Runnable::run, bothSyncGroupsComplete::countDown);
+        firstSsg.addTransaction(t);
+
+        View backgroundView = mActivity.getBackgroundView();
+        firstSsg.add(backgroundView.getRootSurfaceControl(),
+                () -> mActivity.runOnUiThread(() -> backgroundView.setBackgroundColor(Color.RED)));
+        firstSsg.markSyncReady();
+
+        addSecondSyncGroup(secondSsg, secondDrawCompleteLatch, bothSyncGroupsComplete);
+
+        assertTrue("Failed to wait for both SurfaceSyncGroups to apply",
+                bothSyncGroupsComplete.await(5, TimeUnit.SECONDS));
+
+        validateScreenshot();
+    }
+
+    private void addSecondSyncGroup(SurfaceSyncGroup surfaceSyncGroup,
+            CountDownLatch waitForSecondDraw, CountDownLatch bothSyncGroupsComplete) {
+        View backgroundView = mActivity.getBackgroundView();
+        ViewTreeObserver viewTreeObserver = backgroundView.getViewTreeObserver();
+        viewTreeObserver.registerFrameCommitCallback(() -> mHandler.post(() -> {
+            surfaceSyncGroup.add(backgroundView.getRootSurfaceControl(),
+                    () -> mActivity.runOnUiThread(
+                            () -> backgroundView.setBackgroundColor(Color.BLUE)));
+
+            SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+            t.addTransactionCommittedListener(Runnable::run, bothSyncGroupsComplete::countDown);
+            surfaceSyncGroup.addTransaction(t);
+            surfaceSyncGroup.markSyncReady();
+            viewTreeObserver.registerFrameCommitCallback(waitForSecondDraw::countDown);
+        }));
+    }
+
+    private void validateScreenshot() {
+        Bitmap screenshot = mInstrumentation.getUiAutomation().takeScreenshot(
+                mActivity.getWindow());
+        assertNotNull("Failed to generate a screenshot", screenshot);
+        Bitmap swBitmap = screenshot.copy(Bitmap.Config.ARGB_8888, false);
+        screenshot.recycle();
+
+        BitmapPixelChecker pixelChecker = new BitmapPixelChecker(Color.BLUE);
+        int halfWidth = swBitmap.getWidth() / 2;
+        int halfHeight = swBitmap.getHeight() / 2;
+        // We don't need to check all the pixels since we only care that at least some of them are
+        // blue. If the buffers were submitted out of order, all the pixels will be red.
+        Rect bounds = new Rect(halfWidth, halfHeight, halfWidth + 10, halfHeight + 10);
+        int numMatchingPixels = pixelChecker.getNumMatchingPixels(swBitmap, bounds);
+        assertEquals("Expected 100 received " + numMatchingPixels + " matching pixels", 100,
+                numMatchingPixels);
+
+        swBitmap.recycle();
+    }
+}
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/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
index 1e2fdec..653b52b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
@@ -109,14 +109,19 @@
     final SurfaceControl.Transaction mMockT = mock(SurfaceControl.Transaction.class);
     private BLASTSyncEngine mSyncEngine;
 
+    private Transition createTestTransition(int transitType, TransitionController controller) {
+        return new Transition(transitType, 0 /* flags */, controller, controller.mSyncEngine);
+    }
+
     private Transition createTestTransition(int transitType) {
         final TransitionController controller = new TestTransitionController(
                 mock(ActivityTaskManagerService.class));
 
         mSyncEngine = createTestBLASTSyncEngine();
-        final Transition t = new Transition(transitType, 0 /* flags */, controller, mSyncEngine);
-        t.startCollecting(0 /* timeoutMs */);
-        return t;
+        controller.setSyncEngine(mSyncEngine);
+        final Transition out = createTestTransition(transitType, controller);
+        out.startCollecting(0 /* timeoutMs */);
+        return out;
     }
 
     @Test
@@ -367,7 +372,6 @@
             final ActivityRecord act = createActivityRecord(tasks[i]);
             // alternate so that the transition doesn't get promoted to the display area
             act.setVisibleRequested((i % 2) == 0); // starts invisible
-            act.visibleIgnoringKeyguard = (i % 2) == 0;
             if (i == showWallpaperTask) {
                 doReturn(true).when(act).showWallpaper();
             }
@@ -754,10 +758,8 @@
 
         final ActivityRecord closing = createActivityRecord(oldTask);
         closing.setOccludesParent(true);
-        closing.visibleIgnoringKeyguard = true;
         final ActivityRecord opening = createActivityRecord(newTask);
         opening.setOccludesParent(true);
-        opening.visibleIgnoringKeyguard = true;
         // Start states.
         changes.put(newTask, new Transition.ChangeInfo(newTask, false /* vis */, true /* exChg */));
         changes.put(oldTask, new Transition.ChangeInfo(oldTask, true /* vis */, false /* exChg */));
@@ -795,10 +797,8 @@
 
         final ActivityRecord closing = createActivityRecord(oldTask);
         closing.setOccludesParent(true);
-        closing.visibleIgnoringKeyguard = true;
         final ActivityRecord opening = createActivityRecord(newTask);
         opening.setOccludesParent(false);
-        opening.visibleIgnoringKeyguard = true;
         // Start states.
         changes.put(newTask, new Transition.ChangeInfo(newTask, false /* vis */, true /* exChg */));
         changes.put(oldTask, new Transition.ChangeInfo(oldTask, true /* vis */, false /* exChg */));
@@ -837,10 +837,8 @@
 
         final ActivityRecord closing = closingTaskFragment.getTopMostActivity();
         closing.setOccludesParent(true);
-        closing.visibleIgnoringKeyguard = true;
         final ActivityRecord opening = openingTaskFragment.getTopMostActivity();
         opening.setOccludesParent(true);
-        opening.visibleIgnoringKeyguard = true;
         // Start states.
         changes.put(openingTaskFragment, new Transition.ChangeInfo(openingTaskFragment,
                 false /* vis */, true /* exChg */));
@@ -881,10 +879,8 @@
 
         final ActivityRecord closing = closingTaskFragment.getTopMostActivity();
         closing.setOccludesParent(true);
-        closing.visibleIgnoringKeyguard = true;
         final ActivityRecord opening = openingTaskFragment.getTopMostActivity();
         opening.setOccludesParent(false);
-        opening.visibleIgnoringKeyguard = true;
         // Start states.
         changes.put(openingTaskFragment, new Transition.ChangeInfo(openingTaskFragment,
                 false /* vis */, true /* exChg */));
@@ -925,10 +921,8 @@
 
         final ActivityRecord opening = openingTaskFragment.getTopMostActivity();
         opening.setOccludesParent(true);
-        opening.visibleIgnoringKeyguard = true;
         final ActivityRecord closing = closingTaskFragment.getTopMostActivity();
         closing.setOccludesParent(true);
-        closing.visibleIgnoringKeyguard = true;
         closing.finishing = true;
         // Start states.
         changes.put(openingTaskFragment, new Transition.ChangeInfo(openingTaskFragment,
@@ -970,10 +964,8 @@
 
         final ActivityRecord opening = openingTaskFragment.getTopMostActivity();
         opening.setOccludesParent(true);
-        opening.visibleIgnoringKeyguard = true;
         final ActivityRecord closing = closingTaskFragment.getTopMostActivity();
         closing.setOccludesParent(false);
-        closing.visibleIgnoringKeyguard = true;
         closing.finishing = true;
         // Start states.
         changes.put(openingTaskFragment, new Transition.ChangeInfo(openingTaskFragment,
@@ -1282,6 +1274,7 @@
     @Test
     public void testIntermediateVisibility() {
         final TransitionController controller = new TestTransitionController(mAtm);
+        controller.setSyncEngine(mWm.mSyncEngine);
         final ITransitionPlayer player = new ITransitionPlayer.Default();
         controller.registerTransitionPlayer(player, null /* playerProc */);
         final Transition openTransition = controller.createTransition(TRANSIT_OPEN);
@@ -1365,6 +1358,7 @@
                 super.dispatchLegacyAppTransitionFinished(ar);
             }
         };
+        controller.setSyncEngine(mWm.mSyncEngine);
         controller.mSnapshotController = mWm.mSnapshotController;
         final TaskSnapshotController taskSnapshotController = controller.mSnapshotController
                 .mTaskSnapshotController;
@@ -1410,9 +1404,9 @@
         final Transition.ChangeInfo task1ChangeInfo = closeTransition.mChanges.get(task1);
         assertNotNull(task1ChangeInfo);
         assertTrue(task1ChangeInfo.hasChanged());
+        // Make sure the unrelated activity is NOT collected.
         final Transition.ChangeInfo activity1ChangeInfo = closeTransition.mChanges.get(activity1);
-        assertNotNull(activity1ChangeInfo);
-        assertTrue(activity1ChangeInfo.hasChanged());
+        assertNull(activity1ChangeInfo);
         // No need to wait for the activity in transient hide task.
         assertEquals(WindowContainer.SYNC_STATE_NONE, activity1.mSyncState);
 
@@ -1442,6 +1436,7 @@
                 }
             }
         });
+        assertTrue(activity1.isVisible());
         controller.finishTransition(closeTransition);
         assertTrue(wasInFinishingTransition[0]);
         assertNull(controller.mFinishingTransition);
@@ -1450,6 +1445,7 @@
         assertEquals(ActivityTaskManagerService.APP_SWITCH_DISALLOW, mAtm.getBalAppSwitchesState());
         // Because task1 is occluded by task2, finishTransition should make activity1 invisible.
         assertFalse(activity1.isVisibleRequested());
+        // Make sure activity1 visibility was committed
         assertFalse(activity1.isVisible());
         assertFalse(activity1.app.hasActivityInVisibleTask());
 
@@ -1460,6 +1456,7 @@
     @Test
     public void testNotReadyPushPop() {
         final TransitionController controller = new TestTransitionController(mAtm);
+        controller.setSyncEngine(mWm.mSyncEngine);
         final ITransitionPlayer player = new ITransitionPlayer.Default();
         controller.registerTransitionPlayer(player, null /* playerProc */);
         final Transition openTransition = controller.createTransition(TRANSIT_OPEN);
@@ -1916,6 +1913,110 @@
         assertEquals(TRANSIT_CHANGE, info.getChanges().get(0).getMode());
     }
 
+    @Test
+    public void testQueueStartCollect() {
+        final TransitionController controller = mAtm.getTransitionController();
+        final TestTransitionPlayer player = registerTestTransitionPlayer();
+
+        mSyncEngine = createTestBLASTSyncEngine();
+        controller.setSyncEngine(mSyncEngine);
+
+        final Transition transitA = createTestTransition(TRANSIT_OPEN, controller);
+        final Transition transitB = createTestTransition(TRANSIT_OPEN, controller);
+        final Transition transitC = createTestTransition(TRANSIT_OPEN, controller);
+
+        final boolean[] onStartA = new boolean[]{false, false};
+        final boolean[] onStartB = new boolean[]{false, false};
+        controller.startCollectOrQueue(transitA, (deferred) -> {
+            onStartA[0] = true;
+            onStartA[1] = deferred;
+        });
+        controller.startCollectOrQueue(transitB, (deferred) -> {
+            onStartB[0] = true;
+            onStartB[1] = deferred;
+        });
+        waitUntilHandlersIdle();
+
+        assertTrue(onStartA[0]);
+        assertFalse(onStartA[1]);
+        assertTrue(transitA.isCollecting());
+
+        // B should be queued, so no calls yet
+        assertFalse(onStartB[0]);
+        assertTrue(transitB.isPending());
+
+        // finish collecting A
+        transitA.start();
+        transitA.setAllReady();
+        mSyncEngine.tryFinishForTest(transitA.getSyncId());
+        waitUntilHandlersIdle();
+
+        assertTrue(transitA.isPlaying());
+        assertTrue(transitB.isCollecting());
+        assertTrue(onStartB[0]);
+        // Should receive deferred = true
+        assertTrue(onStartB[1]);
+
+        // finish collecting B
+        transitB.start();
+        transitB.setAllReady();
+        mSyncEngine.tryFinishForTest(transitB.getSyncId());
+        assertTrue(transitB.isPlaying());
+
+        // Now we should be able to start collecting directly a new transition
+        final boolean[] onStartC = new boolean[]{false, false};
+        controller.startCollectOrQueue(transitC, (deferred) -> {
+            onStartC[0] = true;
+            onStartC[1] = deferred;
+        });
+        waitUntilHandlersIdle();
+        assertTrue(onStartC[0]);
+        assertFalse(onStartC[1]);
+        assertTrue(transitC.isCollecting());
+    }
+
+    @Test
+    public void testQueueWithLegacy() {
+        final TransitionController controller = mAtm.getTransitionController();
+        final TestTransitionPlayer player = registerTestTransitionPlayer();
+
+        mSyncEngine = createTestBLASTSyncEngine();
+        controller.setSyncEngine(mSyncEngine);
+
+        final Transition transitA = createTestTransition(TRANSIT_OPEN, controller);
+        final Transition transitB = createTestTransition(TRANSIT_OPEN, controller);
+
+        controller.startCollectOrQueue(transitA, (deferred) -> {});
+
+        BLASTSyncEngine.SyncGroup legacySync = mSyncEngine.prepareSyncSet(
+                mock(BLASTSyncEngine.TransactionReadyListener.class), "test");
+        final boolean[] applyLegacy = new boolean[]{false};
+        controller.startLegacySyncOrQueue(legacySync, () -> applyLegacy[0] = true);
+        assertFalse(applyLegacy[0]);
+        waitUntilHandlersIdle();
+
+        controller.startCollectOrQueue(transitB, (deferred) -> {});
+        assertTrue(transitA.isCollecting());
+
+        // finish collecting A
+        transitA.start();
+        transitA.setAllReady();
+        mSyncEngine.tryFinishForTest(transitA.getSyncId());
+        waitUntilHandlersIdle();
+
+        assertTrue(transitA.isPlaying());
+        // legacy sync should start now
+        assertTrue(applyLegacy[0]);
+        // transitB must wait
+        assertTrue(transitB.isPending());
+
+        // finish legacy sync
+        mSyncEngine.setReady(legacySync.mSyncId);
+        mSyncEngine.tryFinishForTest(legacySync.mSyncId);
+        // transitioncontroller should be notified so it can start collecting B
+        assertTrue(transitB.isCollecting());
+    }
+
     private static void makeTaskOrganized(Task... tasks) {
         final ITaskOrganizer organizer = mock(ITaskOrganizer.class);
         for (Task t : tasks) {
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 6cf2b2d..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;
@@ -500,7 +502,6 @@
         RecentsAnimationController controller = new RecentsAnimationController(
                 mWm, mockRunner, null, displayId);
         spyOn(controller);
-        controller.mShouldAttachNavBarToAppDuringTransition = true;
         doReturn(mNavBarWindow).when(controller).getNavigationBarWindow();
         mWm.setRecentsAnimationController(controller);
 
@@ -508,6 +509,10 @@
         spyOn(mDisplayContent.mInputMethodWindow);
         doReturn(true).when(mDisplayContent.mInputMethodWindow).isVisible();
 
+        DisplayPolicy policy = mDisplayContent.getDisplayPolicy();
+        spyOn(policy);
+        doReturn(true).when(policy).shouldAttachNavBarToAppDuringTransition();
+
         // create home activity
         Task rootHomeTask = mDisplayContent.getDefaultTaskDisplayArea().getRootHomeTask();
         final ActivityRecord homeActivity = new ActivityBuilder(mWm.mAtmService)
@@ -550,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/usb/java/com/android/server/usb/UsbAlsaDevice.java b/services/usb/java/com/android/server/usb/UsbAlsaDevice.java
index 337e1f9..7fe8582 100644
--- a/services/usb/java/com/android/server/usb/UsbAlsaDevice.java
+++ b/services/usb/java/com/android/server/usb/UsbAlsaDevice.java
@@ -27,6 +27,8 @@
 import com.android.internal.util.dump.DualDumpOutputStream;
 import com.android.server.audio.AudioService;
 
+import java.util.Arrays;
+
 /**
  * Represents the ALSA specification, and attributes of an ALSA device.
  */
@@ -36,17 +38,21 @@
 
     private final int mCardNum;
     private final int mDeviceNum;
+    private final String mAlsaCardDeviceString;
     private final String mDeviceAddress;
-    private final boolean mHasOutput;
-    private final boolean mHasInput;
 
-    private final boolean mIsInputHeadset;
-    private final boolean mIsOutputHeadset;
+    // The following two constant will be used as index to access arrays.
+    private static final int INPUT = 0;
+    private static final int OUTPUT = 1;
+    private static final int NUM_DIRECTIONS = 2;
+    private static final String[] DIRECTION_STR = {"INPUT", "OUTPUT"};
+    private final boolean[] mHasDevice = new boolean[NUM_DIRECTIONS];
+
+    private final boolean[] mIsHeadset = new boolean[NUM_DIRECTIONS];
     private final boolean mIsDock;
-
-    private boolean mSelected = false;
-    private int mOutputState;
-    private int mInputState;
+    private final int[] mDeviceType = new int[NUM_DIRECTIONS];
+    private boolean[] mIsSelected = new boolean[NUM_DIRECTIONS];
+    private int[] mState = new int[NUM_DIRECTIONS];
     private UsbAlsaJackDetector mJackDetector;
     private IAudioService mAudioService;
 
@@ -60,11 +66,13 @@
         mCardNum = card;
         mDeviceNum = device;
         mDeviceAddress = deviceAddress;
-        mHasOutput = hasOutput;
-        mHasInput = hasInput;
-        mIsInputHeadset = isInputHeadset;
-        mIsOutputHeadset = isOutputHeadset;
+        mHasDevice[OUTPUT] = hasOutput;
+        mHasDevice[INPUT] = hasInput;
+        mIsHeadset[INPUT] = isInputHeadset;
+        mIsHeadset[OUTPUT] = isOutputHeadset;
         mIsDock = isDock;
+        initDeviceType();
+        mAlsaCardDeviceString = getAlsaCardDeviceString();
     }
 
     /**
@@ -104,28 +112,28 @@
      * @return true if the device supports output.
      */
     public boolean hasOutput() {
-        return mHasOutput;
+        return mHasDevice[OUTPUT];
     }
 
     /**
      * @return true if the device supports input (recording).
      */
     public boolean hasInput() {
-        return mHasInput;
-    }
-
-    /**
-     * @return true if the device is a headset for purposes of input.
-     */
-    public boolean isInputHeadset() {
-        return mIsInputHeadset;
+        return mHasDevice[INPUT];
     }
 
     /**
      * @return true if the device is a headset for purposes of output.
      */
     public boolean isOutputHeadset() {
-        return mIsOutputHeadset;
+        return mIsHeadset[OUTPUT];
+    }
+
+    /**
+     * @return true if the device is a headset for purposes of input.
+     */
+    public boolean isInputHeadset() {
+        return mIsHeadset[INPUT];
     }
 
     /**
@@ -157,6 +165,9 @@
 
     /** Begins a jack-detection thread. */
     private synchronized void startJackDetect() {
+        if (mJackDetector != null) {
+            return;
+        }
         // If no jack detect capabilities exist, mJackDetector will be null.
         mJackDetector = UsbAlsaJackDetector.startJackDetect(this);
     }
@@ -171,75 +182,152 @@
 
     /** Start using this device as the selected USB Audio Device. */
     public synchronized void start() {
-        mSelected = true;
-        mInputState = 0;
-        mOutputState = 0;
+        startInput();
+        startOutput();
+    }
+
+    /** Start using this device as the selected USB input device. */
+    public synchronized void startInput() {
+        startDevice(INPUT);
+    }
+
+    /** Start using this device as selected USB output device. */
+    public synchronized void startOutput() {
+        startDevice(OUTPUT);
+    }
+
+    private void startDevice(int direction) {
+        if (mIsSelected[direction]) {
+            return;
+        }
+        mIsSelected[direction] = true;
+        mState[direction] = 0;
         startJackDetect();
-        updateWiredDeviceConnectionState(true);
+        updateWiredDeviceConnectionState(direction, true /*enable*/);
     }
 
     /** Stop using this device as the selected USB Audio Device. */
     public synchronized void stop() {
-        stopJackDetect();
-        updateWiredDeviceConnectionState(false);
-        mSelected = false;
+        stopInput();
+        stopOutput();
     }
 
-    /** Updates AudioService with the connection state of the alsaDevice.
-     *  Checks ALSA Jack state for inputs and outputs before reporting.
+    /** Stop using this device as the selected USB input device. */
+    public synchronized void stopInput() {
+        if (!mIsSelected[INPUT]) {
+            return;
+        }
+        if (!mIsSelected[OUTPUT]) {
+            // Stop jack detection when both input and output are stopped
+            stopJackDetect();
+        }
+        updateInputWiredDeviceConnectionState(false /*enable*/);
+        mIsSelected[INPUT] = false;
+    }
+
+    /** Stop using this device as the selected USB output device. */
+    public synchronized void stopOutput() {
+        if (!mIsSelected[OUTPUT]) {
+            return;
+        }
+        if (!mIsSelected[INPUT]) {
+            // Stop jack detection when both input and output are stopped
+            stopJackDetect();
+        }
+        updateOutputWiredDeviceConnectionState(false /*enable*/);
+        mIsSelected[OUTPUT] = false;
+    }
+
+    private void initDeviceType() {
+        mDeviceType[INPUT] = mHasDevice[INPUT]
+                ? (mIsHeadset[INPUT] ? AudioSystem.DEVICE_IN_USB_HEADSET
+                                     : AudioSystem.DEVICE_IN_USB_DEVICE)
+                : AudioSystem.DEVICE_NONE;
+        mDeviceType[OUTPUT] = mHasDevice[OUTPUT]
+                ? (mIsDock ? AudioSystem.DEVICE_OUT_DGTL_DOCK_HEADSET
+                           : (mIsHeadset[OUTPUT] ? AudioSystem.DEVICE_OUT_USB_HEADSET
+                                                 : AudioSystem.DEVICE_OUT_USB_DEVICE))
+                : AudioSystem.DEVICE_NONE;
+    }
+
+    /**
+     * @return the output device type that will be used to notify AudioService about device
+     *         connection. If there is no output on this device, {@link AudioSystem#DEVICE_NONE}
+     *         will be returned.
      */
-    public synchronized void updateWiredDeviceConnectionState(boolean enable) {
-        if (!mSelected) {
-            Slog.e(TAG, "updateWiredDeviceConnectionState on unselected AlsaDevice!");
-            return;
-        }
-        String alsaCardDeviceString = getAlsaCardDeviceString();
-        if (alsaCardDeviceString == null) {
-            return;
-        }
-        try {
-            // Output Device
-            if (mHasOutput) {
-                int device = mIsDock ? AudioSystem.DEVICE_OUT_DGTL_DOCK_HEADSET
-                        : (mIsOutputHeadset
-                            ? AudioSystem.DEVICE_OUT_USB_HEADSET
-                            : AudioSystem.DEVICE_OUT_USB_DEVICE);
-                if (DEBUG) {
-                    Slog.d(TAG, "pre-call device:0x" + Integer.toHexString(device)
-                            + " addr:" + alsaCardDeviceString
-                            + " name:" + mDeviceName);
-                }
-                boolean connected = isOutputJackConnected();
-                Slog.i(TAG, "OUTPUT JACK connected: " + connected);
-                int outputState = (enable && connected) ? 1 : 0;
-                if (outputState != mOutputState) {
-                    mOutputState = outputState;
-                    AudioDeviceAttributes attributes = new AudioDeviceAttributes(device,
-                            alsaCardDeviceString, mDeviceName);
-                    mAudioService.setWiredDeviceConnectionState(attributes, outputState, TAG);
-                }
-            }
-
-            // Input Device
-            if (mHasInput) {
-                int device = mIsInputHeadset
-                        ? AudioSystem.DEVICE_IN_USB_HEADSET
-                        : AudioSystem.DEVICE_IN_USB_DEVICE;
-                boolean connected = isInputJackConnected();
-                Slog.i(TAG, "INPUT JACK connected: " + connected);
-                int inputState = (enable && connected) ? 1 : 0;
-                if (inputState != mInputState) {
-                    mInputState = inputState;
-                    AudioDeviceAttributes attributes = new AudioDeviceAttributes(device,
-                            alsaCardDeviceString, mDeviceName);
-                    mAudioService.setWiredDeviceConnectionState(attributes, inputState, TAG);
-                }
-            }
-        } catch (RemoteException e) {
-            Slog.e(TAG, "RemoteException in setWiredDeviceConnectionState");
-        }
+    public int getOutputDeviceType() {
+        return mDeviceType[OUTPUT];
     }
 
+    /**
+     * @return the input device type that will be used to notify AudioService about device
+     *         connection. If there is no input on this device, {@link AudioSystem#DEVICE_NONE}
+     *         will be returned.
+     */
+    public int getInputDeviceType() {
+        return mDeviceType[INPUT];
+    }
+
+    private boolean updateWiredDeviceConnectionState(int direction, boolean enable) {
+        if (!mIsSelected[direction]) {
+            Slog.e(TAG, "Updating wired device connection state on unselected device");
+            return false;
+        }
+        if (mDeviceType[direction] == AudioSystem.DEVICE_NONE) {
+            Slog.d(TAG,
+                    "Unable to set device connection state as " + DIRECTION_STR[direction]
+                    + " device type is none");
+            return false;
+        }
+        if (mAlsaCardDeviceString == null) {
+            Slog.w(TAG, "Failed to update " + DIRECTION_STR[direction] + " device connection "
+                    + "state failed as alsa card device string is null");
+            return false;
+        }
+        if (DEBUG) {
+            Slog.d(TAG, "pre-call device:0x" + Integer.toHexString(mDeviceType[direction])
+                    + " addr:" + mAlsaCardDeviceString
+                    + " name:" + mDeviceName);
+        }
+        boolean connected = direction == INPUT ? isInputJackConnected() : isOutputJackConnected();
+        Slog.i(TAG, DIRECTION_STR[direction] + " JACK connected: " + connected);
+        int state = (enable && connected) ? 1 : 0;
+        if (state != mState[direction]) {
+            mState[direction] = state;
+            AudioDeviceAttributes attributes = new AudioDeviceAttributes(
+                    mDeviceType[direction], mAlsaCardDeviceString, mDeviceName);
+            try {
+                mAudioService.setWiredDeviceConnectionState(attributes, state, TAG);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "RemoteException in setWiredDeviceConnectionState for "
+                        + DIRECTION_STR[direction]);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Notify AudioService about the input device connection state.
+     *
+     * @param enable true to notify the device as connected.
+     * @return true only when it successfully notifies AudioService about the device
+     *         connection state.
+     */
+    public synchronized boolean updateInputWiredDeviceConnectionState(boolean enable) {
+        return updateWiredDeviceConnectionState(INPUT, enable);
+    }
+
+    /**
+     * Notify AudioService about the output device connection state.
+     *
+     * @param enable true to notify the device as connected.
+     * @return true only when it successfully notifies AudioService about the device
+     *         connection state.
+     */
+    public synchronized boolean updateOutputWiredDeviceConnectionState(boolean enable) {
+        return updateWiredDeviceConnectionState(OUTPUT, enable);
+    }
 
     /**
      * @Override
@@ -249,8 +337,8 @@
         return "UsbAlsaDevice: [card: " + mCardNum
             + ", device: " + mDeviceNum
             + ", name: " + mDeviceName
-            + ", hasOutput: " + mHasOutput
-            + ", hasInput: " + mHasInput + "]";
+            + ", hasOutput: " + mHasDevice[OUTPUT]
+            + ", hasInput: " + mHasDevice[INPUT] + "]";
     }
 
     /**
@@ -262,8 +350,8 @@
         dump.write("card", UsbAlsaDeviceProto.CARD, mCardNum);
         dump.write("device", UsbAlsaDeviceProto.DEVICE, mDeviceNum);
         dump.write("name", UsbAlsaDeviceProto.NAME, mDeviceName);
-        dump.write("has_output", UsbAlsaDeviceProto.HAS_PLAYBACK, mHasOutput);
-        dump.write("has_input", UsbAlsaDeviceProto.HAS_CAPTURE, mHasInput);
+        dump.write("has_output", UsbAlsaDeviceProto.HAS_PLAYBACK, mHasDevice[OUTPUT]);
+        dump.write("has_input", UsbAlsaDeviceProto.HAS_CAPTURE, mHasDevice[INPUT]);
         dump.write("address", UsbAlsaDeviceProto.ADDRESS, mDeviceAddress);
 
         dump.end(token);
@@ -294,10 +382,8 @@
         UsbAlsaDevice other = (UsbAlsaDevice) obj;
         return (mCardNum == other.mCardNum
                 && mDeviceNum == other.mDeviceNum
-                && mHasOutput == other.mHasOutput
-                && mHasInput == other.mHasInput
-                && mIsInputHeadset == other.mIsInputHeadset
-                && mIsOutputHeadset == other.mIsOutputHeadset
+                && Arrays.equals(mHasDevice, other.mHasDevice)
+                && Arrays.equals(mIsHeadset, other.mIsHeadset)
                 && mIsDock == other.mIsDock);
     }
 
@@ -310,10 +396,10 @@
         int result = 1;
         result = prime * result + mCardNum;
         result = prime * result + mDeviceNum;
-        result = prime * result + (mHasOutput ? 0 : 1);
-        result = prime * result + (mHasInput ? 0 : 1);
-        result = prime * result + (mIsInputHeadset ? 0 : 1);
-        result = prime * result + (mIsOutputHeadset ? 0 : 1);
+        result = prime * result + (mHasDevice[OUTPUT] ? 0 : 1);
+        result = prime * result + (mHasDevice[INPUT] ? 0 : 1);
+        result = prime * result + (mIsHeadset[INPUT] ? 0 : 1);
+        result = prime * result + (mIsHeadset[OUTPUT] ? 0 : 1);
         result = prime * result + (mIsDock ? 0 : 1);
 
         return result;
diff --git a/services/usb/java/com/android/server/usb/UsbAlsaJackDetector.java b/services/usb/java/com/android/server/usb/UsbAlsaJackDetector.java
index c498847..d4f0b59 100644
--- a/services/usb/java/com/android/server/usb/UsbAlsaJackDetector.java
+++ b/services/usb/java/com/android/server/usb/UsbAlsaJackDetector.java
@@ -81,7 +81,8 @@
             if (mStopJackDetect) {
                 return false;
             }
-            mAlsaDevice.updateWiredDeviceConnectionState(true);
+            mAlsaDevice.updateOutputWiredDeviceConnectionState(true);
+            mAlsaDevice.updateInputWiredDeviceConnectionState(true);
         }
         return true;
     }
diff --git a/services/usb/java/com/android/server/usb/UsbAlsaManager.java b/services/usb/java/com/android/server/usb/UsbAlsaManager.java
index aa1d556..99881e1 100644
--- a/services/usb/java/com/android/server/usb/UsbAlsaManager.java
+++ b/services/usb/java/com/android/server/usb/UsbAlsaManager.java
@@ -20,12 +20,14 @@
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.hardware.usb.UsbDevice;
+import android.media.AudioManager;
 import android.media.IAudioService;
 import android.media.midi.MidiDeviceInfo;
 import android.os.Bundle;
 import android.os.FileObserver;
 import android.os.ServiceManager;
 import android.os.SystemClock;
+import android.os.SystemProperties;
 import android.provider.Settings;
 import android.service.usb.UsbAlsaManagerProto;
 import android.util.Slog;
@@ -42,6 +44,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Stack;
 
 /**
  * UsbAlsaManager manages USB audio and MIDI devices.
@@ -51,8 +54,9 @@
     private static final boolean DEBUG = false;
 
     // Flag to turn on/off multi-peripheral select mode
-    // Set to true to have single-device-only mode
-    private static final boolean mIsSingleMode = true;
+    // Set to true to have multi-devices mode
+    private static final boolean IS_MULTI_MODE = SystemProperties.getBoolean(
+            "ro.audio.multi_usb_mode", false /*def*/);
 
     private static final String ALSA_DIRECTORY = "/dev/snd/";
 
@@ -70,7 +74,11 @@
     // this is needed to map USB devices to ALSA Audio Devices, especially to remove an
     // ALSA device when we are notified that its associated USB device has been removed.
     private final ArrayList<UsbAlsaDevice> mAlsaDevices = new ArrayList<UsbAlsaDevice>();
-    private UsbAlsaDevice mSelectedDevice;
+    // A map from device type to attached devices. Given the audio framework only supports
+    // single device connection per device type, only the last attached device will be
+    // connected to audio framework. Once the last device is removed, previous device can
+    // be connected to audio framework.
+    private HashMap<Integer, Stack<UsbAlsaDevice>> mAttachedDevices = new HashMap<>();
 
     //
     // Device Denylist
@@ -162,11 +170,6 @@
             Slog.d(TAG, "selectAlsaDevice() " + alsaDevice);
         }
 
-        // This must be where an existing USB audio device is deselected.... (I think)
-        if (mIsSingleMode && mSelectedDevice != null) {
-            deselectAlsaDevice();
-        }
-
         // FIXME Does not yet handle the case where the setting is changed
         // after device connection.  Ideally we should handle the settings change
         // in SettingsObserver. Here we should log that a USB device is connected
@@ -178,21 +181,18 @@
             return;
         }
 
-        mSelectedDevice = alsaDevice;
         alsaDevice.start();
+
         if (DEBUG) {
             Slog.d(TAG, "selectAlsaDevice() - done.");
         }
     }
 
-    private synchronized void deselectAlsaDevice() {
+    private synchronized void deselectAlsaDevice(UsbAlsaDevice selectedDevice) {
         if (DEBUG) {
-            Slog.d(TAG, "deselectAlsaDevice() mSelectedDevice " + mSelectedDevice);
+            Slog.d(TAG, "deselectAlsaDevice() selectedDevice " + selectedDevice);
         }
-        if (mSelectedDevice != null) {
-            mSelectedDevice.stop();
-            mSelectedDevice = null;
-        }
+        selectedDevice.stop();
     }
 
     private int getAlsaDeviceListIndexFor(String deviceAddress) {
@@ -204,32 +204,86 @@
         return -1;
     }
 
-    private UsbAlsaDevice removeAlsaDeviceFromList(String deviceAddress) {
+    private void addDeviceToAttachedDevicesMap(int deviceType, UsbAlsaDevice device) {
+        if (deviceType == AudioManager.DEVICE_NONE) {
+            Slog.i(TAG, "Ignore caching device as the type is NONE, device=" + device);
+            return;
+        }
+        Stack<UsbAlsaDevice> devices = mAttachedDevices.get(deviceType);
+        if (devices == null) {
+            mAttachedDevices.put(deviceType, new Stack<>());
+            devices = mAttachedDevices.get(deviceType);
+        }
+        devices.push(device);
+    }
+
+    private void addAlsaDevice(UsbAlsaDevice device) {
+        mAlsaDevices.add(0, device);
+        addDeviceToAttachedDevicesMap(device.getInputDeviceType(), device);
+        addDeviceToAttachedDevicesMap(device.getOutputDeviceType(), device);
+    }
+
+    private void removeDeviceFromAttachedDevicesMap(int deviceType, UsbAlsaDevice device) {
+        Stack<UsbAlsaDevice> devices = mAttachedDevices.get(deviceType);
+        if (devices == null) {
+            return;
+        }
+        devices.remove(device);
+        if (devices.isEmpty()) {
+            mAttachedDevices.remove(deviceType);
+        }
+    }
+
+    private UsbAlsaDevice removeAlsaDevice(String deviceAddress) {
         int index = getAlsaDeviceListIndexFor(deviceAddress);
         if (index > -1) {
-            return mAlsaDevices.remove(index);
+            UsbAlsaDevice device = mAlsaDevices.remove(index);
+            removeDeviceFromAttachedDevicesMap(device.getOutputDeviceType(), device);
+            removeDeviceFromAttachedDevicesMap(device.getInputDeviceType(), device);
+            return device;
         } else {
             return null;
         }
     }
 
-    /* package */ UsbAlsaDevice selectDefaultDevice() {
+    private UsbAlsaDevice selectDefaultDevice(int deviceType) {
         if (DEBUG) {
-            Slog.d(TAG, "selectDefaultDevice()");
+            Slog.d(TAG, "selectDefaultDevice():" + deviceType);
         }
 
-        if (mAlsaDevices.size() > 0) {
-            UsbAlsaDevice alsaDevice = mAlsaDevices.get(0);
-            if (DEBUG) {
-                Slog.d(TAG, "  alsaDevice:" + alsaDevice);
-            }
-            if (alsaDevice != null) {
-                selectAlsaDevice(alsaDevice);
-            }
-            return alsaDevice;
-        } else {
+        Stack<UsbAlsaDevice> devices = mAttachedDevices.get(deviceType);
+        if (devices == null || devices.isEmpty()) {
             return null;
         }
+        UsbAlsaDevice alsaDevice = devices.peek();
+        Slog.d(TAG, "select default device:" + alsaDevice);
+        if (AudioManager.isInputDevice(deviceType)) {
+            alsaDevice.startInput();
+        } else {
+            alsaDevice.startOutput();
+        }
+        return alsaDevice;
+    }
+
+    private void deselectCurrentDevice(int deviceType) {
+        if (DEBUG) {
+            Slog.d(TAG, "deselectCurrentDevice():" + deviceType);
+        }
+        if (deviceType == AudioManager.DEVICE_NONE) {
+            return;
+        }
+
+        Stack<UsbAlsaDevice> devices = mAttachedDevices.get(deviceType);
+        if (devices == null || devices.isEmpty()) {
+            return;
+        }
+        UsbAlsaDevice alsaDevice = devices.peek();
+        Slog.d(TAG, "deselect current device:" + alsaDevice);
+        if (AudioManager.isInputDevice(deviceType)) {
+            alsaDevice.stopInput();
+        } else {
+            alsaDevice.stopOutput();
+        }
     }
 
     /* package */ void usbDeviceAdded(String deviceAddress, UsbDevice usbDevice,
@@ -246,6 +300,7 @@
         AlsaCardsParser.AlsaCardRecord cardRec =
                 mCardsParser.findCardNumFor(deviceAddress);
         if (cardRec == null) {
+            Slog.e(TAG, "usbDeviceAdded(): cannot find sound card for " + deviceAddress);
             return;
         }
 
@@ -275,12 +330,19 @@
                     new UsbAlsaDevice(mAudioService, cardRec.getCardNum(), 0 /*device*/,
                                       deviceAddress, hasOutput, hasInput,
                                       isInputHeadset, isOutputHeadset, isDock);
-            if (alsaDevice != null) {
-                alsaDevice.setDeviceNameAndDescription(
-                          cardRec.getCardName(), cardRec.getCardDescription());
-                mAlsaDevices.add(0, alsaDevice);
-                selectAlsaDevice(alsaDevice);
+            alsaDevice.setDeviceNameAndDescription(
+                      cardRec.getCardName(), cardRec.getCardDescription());
+            if (IS_MULTI_MODE) {
+                deselectCurrentDevice(alsaDevice.getInputDeviceType());
+                deselectCurrentDevice(alsaDevice.getOutputDeviceType());
+            } else {
+                // At single mode, the first device is the selected device.
+                if (!mAlsaDevices.isEmpty()) {
+                    deselectAlsaDevice(mAlsaDevices.get(0));
+                }
             }
+            addAlsaDevice(alsaDevice);
+            selectAlsaDevice(alsaDevice);
         }
 
         addMidiDevice(deviceAddress, usbDevice, parser, cardRec);
@@ -346,12 +408,20 @@
         }
 
         // Audio
-        UsbAlsaDevice alsaDevice = removeAlsaDeviceFromList(deviceAddress);
+        UsbAlsaDevice alsaDevice = removeAlsaDevice(deviceAddress);
         Slog.i(TAG, "USB Audio Device Removed: " + alsaDevice);
-        if (alsaDevice != null && alsaDevice == mSelectedDevice) {
+        if (alsaDevice != null) {
             waitForAlsaDevice(alsaDevice.getCardNum(), false /*isAdded*/);
-            deselectAlsaDevice();
-            selectDefaultDevice(); // if there any external devices left, select one of them
+            deselectAlsaDevice(alsaDevice);
+            if (IS_MULTI_MODE) {
+                selectDefaultDevice(alsaDevice.getOutputDeviceType());
+                selectDefaultDevice(alsaDevice.getInputDeviceType());
+            } else {
+                // If there are any external devices left, select the latest attached one
+                if (!mAlsaDevices.isEmpty() && mAlsaDevices.get(0) != null) {
+                    selectAlsaDevice(mAlsaDevices.get(0));
+                }
+            }
         }
 
         // MIDI
@@ -362,7 +432,6 @@
         }
 
         logDevices("usbDeviceRemoved()");
-
     }
 
    /* package */ void setPeripheralMidiState(boolean enabled, int card, int device) {
diff --git a/services/voiceinteraction/TEST_MAPPING b/services/voiceinteraction/TEST_MAPPING
index 5fe1c8d..e3d2549 100644
--- a/services/voiceinteraction/TEST_MAPPING
+++ b/services/voiceinteraction/TEST_MAPPING
@@ -5,6 +5,9 @@
       "options": [
         {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
+        },
+        {
+          "exclude-filter": "android.voiceinteraction.cts.HotwordDetectionServiceStressTest"
         }
       ]
     },
@@ -39,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/SoundTriggerHelper.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
index 5efd158..07dc1c6 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
@@ -315,12 +315,13 @@
             IRecognitionStatusCallback callback, RecognitionConfig recognitionConfig,
             int keyphraseId, boolean runInBatterySaverMode) {
         synchronized (mLock) {
+            // TODO Remove previous callback handling
             IRecognitionStatusCallback oldCallback = modelData.getCallback();
             if (oldCallback != null && oldCallback.asBinder() != callback.asBinder()) {
                 Slog.w(TAG, "Canceling previous recognition for model id: "
                         + modelData.getModelId());
                 try {
-                    oldCallback.onError(STATUS_ERROR);
+                    oldCallback.onPreempted();
                 } catch (RemoteException e) {
                     Slog.w(TAG, "RemoteException in onDetectionStopped", e);
                 }
@@ -759,15 +760,12 @@
                     onRecognitionAbortLocked(event);
                     break;
                 case SoundTrigger.RECOGNITION_STATUS_FAILURE:
-                    // Fire failures to all listeners since it's not tied to a keyphrase.
-                    onRecognitionFailureLocked();
-                    break;
                 case SoundTrigger.RECOGNITION_STATUS_SUCCESS:
                 case SoundTrigger.RECOGNITION_STATUS_GET_STATE_RESPONSE:
                     if (isKeyphraseRecognitionEvent(event)) {
-                        onKeyphraseRecognitionSuccessLocked((KeyphraseRecognitionEvent) event);
+                        onKeyphraseRecognitionLocked((KeyphraseRecognitionEvent) event);
                     } else {
-                        onGenericRecognitionSuccessLocked((GenericRecognitionEvent) event);
+                        onGenericRecognitionLocked((GenericRecognitionEvent) event);
                     }
                     break;
             }
@@ -778,7 +776,7 @@
         return event instanceof KeyphraseRecognitionEvent;
     }
 
-    private void onGenericRecognitionSuccessLocked(GenericRecognitionEvent event) {
+    private void onGenericRecognitionLocked(GenericRecognitionEvent event) {
         MetricsLogger.count(mContext, "sth_generic_recognition_event", 1);
         if (event.status != SoundTrigger.RECOGNITION_STATUS_SUCCESS
                 && event.status != SoundTrigger.RECOGNITION_STATUS_GET_STATE_RESPONSE) {
@@ -901,17 +899,6 @@
         }
     }
 
-    private void onRecognitionFailureLocked() {
-        Slog.w(TAG, "Recognition failure");
-        MetricsLogger.count(mContext, "sth_recognition_failure_event", 1);
-        try {
-            sendErrorCallbacksToAllLocked(STATUS_ERROR);
-        } finally {
-            internalClearModelStateLocked();
-            internalClearGlobalStateLocked();
-        }
-    }
-
     private int getKeyphraseIdFromEvent(KeyphraseRecognitionEvent event) {
         if (event == null) {
             Slog.w(TAG, "Null RecognitionEvent received.");
@@ -927,7 +914,7 @@
         return keyphraseExtras[0].id;
     }
 
-    private void onKeyphraseRecognitionSuccessLocked(KeyphraseRecognitionEvent event) {
+    private void onKeyphraseRecognitionLocked(KeyphraseRecognitionEvent event) {
         Slog.i(TAG, "Recognition success");
         MetricsLogger.count(mContext, "sth_keyphrase_recognition_event", 1);
         int keyphraseId = getKeyphraseIdFromEvent(event);
@@ -1001,7 +988,17 @@
     private void onServiceDiedLocked() {
         try {
             MetricsLogger.count(mContext, "sth_service_died", 1);
-            sendErrorCallbacksToAllLocked(SoundTrigger.STATUS_DEAD_OBJECT);
+            for (ModelData modelData : mModelDataMap.values()) {
+                IRecognitionStatusCallback callback = modelData.getCallback();
+                if (callback != null) {
+                    try {
+                        callback.onModuleDied();
+                    } catch (RemoteException e) {
+                        Slog.w(TAG, "RemoteException send moduleDied for model handle " +
+                                modelData.getHandle(), e);
+                    }
+                }
+            }
         } finally {
             internalClearModelStateLocked();
             internalClearGlobalStateLocked();
@@ -1111,21 +1108,6 @@
         }
     }
 
-    // Sends an error callback to all models with a valid registered callback.
-    private void sendErrorCallbacksToAllLocked(int errorCode) {
-        for (ModelData modelData : mModelDataMap.values()) {
-            IRecognitionStatusCallback callback = modelData.getCallback();
-            if (callback != null) {
-                try {
-                    callback.onError(errorCode);
-                } catch (RemoteException e) {
-                    Slog.w(TAG, "RemoteException sendErrorCallbacksToAllLocked for model handle " +
-                            modelData.getHandle(), e);
-                }
-            }
-        }
-    }
-
     /**
      * Stops and unloads all models. This is intended as a clean-up call with the expectation that
      * this instance is not used after.
@@ -1342,11 +1324,11 @@
             // Notify of error if needed.
             if (notifyClientOnError) {
                 try {
-                    callback.onError(status);
+                    callback.onResumeFailed(status);
                 } catch (DeadObjectException e) {
                     forceStopAndUnloadModelLocked(modelData, e);
                 } catch (RemoteException e) {
-                    Slog.w(TAG, "RemoteException in onError", e);
+                    Slog.w(TAG, "RemoteException in onResumeFailed", e);
                 }
             }
         } else {
@@ -1382,15 +1364,15 @@
         status = mModule.stopRecognition(modelData.getHandle());
 
         if (status != SoundTrigger.STATUS_OK) {
-            Slog.w(TAG, "stopRecognition call failed with " + status);
+            Slog.e(TAG, "stopRecognition call failed with " + status);
             MetricsLogger.count(mContext, "sth_stop_recognition_error", 1);
             if (notify) {
                 try {
-                    callback.onError(status);
+                    callback.onPauseFailed(status);
                 } catch (DeadObjectException e) {
                     forceStopAndUnloadModelLocked(modelData, e);
                 } catch (RemoteException e) {
-                    Slog.w(TAG, "RemoteException in onError", e);
+                    Slog.w(TAG, "RemoteException in onPauseFailed", e);
                 }
             }
         } else {
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
index 203a3e7..790be8d 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
@@ -25,6 +25,7 @@
 import static android.content.pm.PackageManager.GET_SERVICES;
 import static android.content.pm.PackageManager.MATCH_DEBUG_TRIAGED_MISSING;
 import static android.hardware.soundtrigger.SoundTrigger.STATUS_BAD_VALUE;
+import static android.hardware.soundtrigger.SoundTrigger.STATUS_DEAD_OBJECT;
 import static android.hardware.soundtrigger.SoundTrigger.STATUS_ERROR;
 import static android.hardware.soundtrigger.SoundTrigger.STATUS_OK;
 import static android.provider.Settings.Global.MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY;
@@ -72,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;
@@ -341,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) {
@@ -1388,8 +1373,7 @@
                         }));
             }
 
-            @Override
-            public void onError(int status) {
+            private void onError(int status) {
                 if (DEBUG) Slog.v(TAG, mPuuid + ": onError: " + status);
 
                 sEventLogger.enqueue(new EventLogger.StringEvent(mPuuid
@@ -1412,6 +1396,30 @@
             }
 
             @Override
+            public void onPreempted() {
+                if (DEBUG) Slog.v(TAG, mPuuid + ": onPreempted");
+                onError(STATUS_ERROR);
+            }
+
+            @Override
+            public void onModuleDied() {
+                if (DEBUG) Slog.v(TAG, mPuuid + ": onModuleDied");
+                onError(STATUS_DEAD_OBJECT);
+            }
+
+            @Override
+            public void onResumeFailed(int status) {
+                if (DEBUG) Slog.v(TAG, mPuuid + ": onResumeFailed: " + status);
+                onError(status);
+            }
+
+            @Override
+            public void onPauseFailed(int status) {
+                if (DEBUG) Slog.v(TAG, mPuuid + ": onPauseFailed: " + status);
+                onError(status);
+            }
+
+            @Override
             public void onRecognitionPaused() {
                 Slog.i(TAG, mPuuid + "->" + mServiceName + ": IGNORED onRecognitionPaused");
 
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerDuplicateModelHandler.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerDuplicateModelHandler.java
new file mode 100644
index 0000000..0104193
--- /dev/null
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerDuplicateModelHandler.java
@@ -0,0 +1,205 @@
+/*
+ * 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.soundtrigger_middleware;
+
+import android.annotation.NonNull;
+import android.media.soundtrigger.ModelParameterRange;
+import android.media.soundtrigger.PhraseSoundModel;
+import android.media.soundtrigger.Properties;
+import android.media.soundtrigger.RecognitionConfig;
+import android.media.soundtrigger.SoundModel;
+import android.media.soundtrigger.Status;
+import android.os.IBinder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This wrapper prevents a models with the same UUID from being loaded concurrently. This is used to
+ * protect STHAL implementations, which don't support concurrent loads of the same model. We reject
+ * the duplicate load with {@link Status#RESOURCE_CONTENTION}.
+ */
+public class SoundTriggerDuplicateModelHandler implements ISoundTriggerHal {
+    private final @NonNull ISoundTriggerHal mDelegate;
+
+    private GlobalCallback mGlobalCallback;
+    // There are rarely more than two models loaded.
+    private final List<ModelData> mModelList = new ArrayList<>();
+
+    private static final class ModelData {
+        ModelData(int modelId, String uuid) {
+            mModelId = modelId;
+            mUuid = uuid;
+        }
+
+        int getModelId() {
+            return mModelId;
+        }
+
+        String getUuid() {
+            return mUuid;
+        }
+
+        boolean getWasContended() {
+            return mWasContended;
+        }
+
+        void setWasContended() {
+            mWasContended = true;
+        }
+
+        private int mModelId;
+        private String mUuid;
+        private boolean mWasContended = false;
+    }
+
+    public SoundTriggerDuplicateModelHandler(@NonNull ISoundTriggerHal delegate) {
+        mDelegate = delegate;
+    }
+
+    @Override
+    public void reboot() {
+        mDelegate.reboot();
+    }
+
+    @Override
+    public void detach() {
+        mDelegate.detach();
+    }
+
+    @Override
+    public Properties getProperties() {
+        return mDelegate.getProperties();
+    }
+
+    @Override
+    public void registerCallback(GlobalCallback callback) {
+        mGlobalCallback = callback;
+        mDelegate.registerCallback(mGlobalCallback);
+    }
+
+    @Override
+    public int loadSoundModel(SoundModel soundModel, ModelCallback callback) {
+        synchronized (this) {
+            checkDuplicateModelUuid(soundModel.uuid);
+            var result = mDelegate.loadSoundModel(soundModel, callback);
+            mModelList.add(new ModelData(result, soundModel.uuid));
+            return result;
+        }
+    }
+
+    @Override
+    public int loadPhraseSoundModel(PhraseSoundModel soundModel, ModelCallback callback) {
+        synchronized (this) {
+            checkDuplicateModelUuid(soundModel.common.uuid);
+            var result = mDelegate.loadPhraseSoundModel(soundModel, callback);
+            mModelList.add(new ModelData(result, soundModel.common.uuid));
+            return result;
+        }
+    }
+
+    @Override
+    public void unloadSoundModel(int modelHandle) {
+        mDelegate.unloadSoundModel(modelHandle);
+        for (int i = 0; i < mModelList.size(); i++) {
+            if (mModelList.get(i).getModelId() == modelHandle) {
+                var modelData = mModelList.remove(i);
+                if (modelData.getWasContended()) {
+                    mGlobalCallback.onResourcesAvailable();
+                }
+                // Model ID is unique
+                return;
+            }
+        }
+    }
+
+    // Uninteresting delegation calls to follow.
+    @Override
+    public void stopRecognition(int modelHandle) {
+        mDelegate.stopRecognition(modelHandle);
+    }
+
+    @Override
+    public void startRecognition(
+            int modelHandle, int deviceHandle, int ioHandle, RecognitionConfig config) {
+        mDelegate.startRecognition(modelHandle, deviceHandle, ioHandle, config);
+    }
+
+    @Override
+    public void forceRecognitionEvent(int modelHandle) {
+        mDelegate.forceRecognitionEvent(modelHandle);
+    }
+
+    @Override
+    public int getModelParameter(int modelHandle, int param) {
+        return mDelegate.getModelParameter(modelHandle, param);
+    }
+
+    @Override
+    public void setModelParameter(int modelHandle, int param, int value) {
+        mDelegate.setModelParameter(modelHandle, param, value);
+    }
+
+    @Override
+    public ModelParameterRange queryParameter(int modelHandle, int param) {
+        return mDelegate.queryParameter(modelHandle, param);
+    }
+
+    @Override
+    public void linkToDeath(IBinder.DeathRecipient recipient) {
+        mDelegate.linkToDeath(recipient);
+    }
+
+    @Override
+    public void unlinkToDeath(IBinder.DeathRecipient recipient) {
+        mDelegate.unlinkToDeath(recipient);
+    }
+
+    @Override
+    public String interfaceDescriptor() {
+        return mDelegate.interfaceDescriptor();
+    }
+
+    @Override
+    public void flushCallbacks() {
+        mDelegate.flushCallbacks();
+    }
+
+    @Override
+    public void clientAttached(IBinder binder) {
+        mDelegate.clientAttached(binder);
+    }
+
+    @Override
+    public void clientDetached(IBinder binder) {
+        mDelegate.clientDetached(binder);
+    }
+
+    /**
+     * Helper for handling duplicate model. If there is a load attempt for a model with a UUID which
+     * is already loaded: 1) Reject with {@link Status.RESOURCE_CONTENTION} 2) Mark the already
+     * loaded model as contended, as we need to dispatch a resource available callback following the
+     * original model being unloaded.
+     */
+    private void checkDuplicateModelUuid(String uuid) {
+        var model = mModelList.stream().filter(x -> x.getUuid().equals(uuid)).findFirst();
+        if (model.isPresent()) {
+            model.get().setWasContended();
+            throw new RecoverableException(Status.RESOURCE_CONTENTION);
+        }
+    }
+}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java
index d2d8f1a..6223b2e 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java
@@ -170,7 +170,8 @@
      */
     private void attachToHal() {
         mHalService = new SoundTriggerHalEnforcer(
-                new SoundTriggerHalWatchdog(mHalFactory.create()));
+                new SoundTriggerHalWatchdog(
+                    new SoundTriggerDuplicateModelHandler(mHalFactory.create())));
         mHalService.linkToDeath(this);
         mHalService.registerCallback(this);
         mProperties = mHalService.getProperties();
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java
index f3cb9ba..486945d 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java
@@ -56,6 +56,7 @@
 import android.service.voice.IMicrophoneHotwordDetectionVoiceInteractionCallback;
 import android.service.voice.ISandboxedDetectionService;
 import android.service.voice.IVisualQueryDetectionVoiceInteractionCallback;
+import android.service.voice.SoundTriggerFailure;
 import android.service.voice.VisualQueryDetectionService;
 import android.service.voice.VisualQueryDetectionServiceFailure;
 import android.service.voice.VoiceInteractionManagerInternal.HotwordDetectionServiceIdentity;
@@ -153,7 +154,8 @@
     private int mRestartCount = 0;
     @NonNull private ServiceConnection mRemoteHotwordDetectionService;
     @NonNull private ServiceConnection mRemoteVisualQueryDetectionService;
-    private IBinder mAudioFlinger;
+    @GuardedBy("mLock")
+    @Nullable private IBinder mAudioFlinger;
     @GuardedBy("mLock")
     private boolean mDebugHotwordLogging = false;
 
@@ -193,7 +195,7 @@
                 new Intent(VisualQueryDetectionService.SERVICE_INTERFACE);
         visualQueryDetectionServiceIntent.setComponent(mVisualQueryDetectionComponentName);
 
-        initAudioFlingerLocked();
+        initAudioFlinger();
 
         mHotwordDetectionServiceConnectionFactory =
                 new ServiceConnectionFactory(hotwordDetectionServiceIntent,
@@ -226,31 +228,41 @@
         }
     }
 
-    private void initAudioFlingerLocked() {
+    private void initAudioFlinger() {
         if (DEBUG) {
-            Slog.d(TAG, "initAudioFlingerLocked");
+            Slog.d(TAG, "initAudioFlinger");
         }
-        mAudioFlinger = ServiceManager.waitForService("media.audio_flinger");
-        if (mAudioFlinger == null) {
+        final IBinder audioFlinger = ServiceManager.waitForService("media.audio_flinger");
+        if (audioFlinger == null) {
+            setAudioFlinger(null);
             throw new IllegalStateException("Service media.audio_flinger wasn't found.");
         }
         if (DEBUG) {
             Slog.d(TAG, "Obtained audio_flinger binder.");
         }
         try {
-            mAudioFlinger.linkToDeath(mAudioServerDeathRecipient, /* flags= */ 0);
+            audioFlinger.linkToDeath(mAudioServerDeathRecipient, /* flags= */ 0);
         } catch (RemoteException e) {
             Slog.w(TAG, "Audio server died before we registered a DeathRecipient; "
-                            + "retrying init.", e);
-            initAudioFlingerLocked();
+                    + "retrying init.", e);
+            initAudioFlinger();
+            return;
+        }
+
+        setAudioFlinger(audioFlinger);
+    }
+
+    private void setAudioFlinger(@Nullable IBinder audioFlinger) {
+        synchronized (mLock) {
+            mAudioFlinger = audioFlinger;
         }
     }
 
     private void audioServerDied() {
         Slog.w(TAG, "Audio server died; restarting the HotwordDetectionService.");
+        // TODO: Check if this needs to be scheduled on a different thread.
+        initAudioFlinger();
         synchronized (mLock) {
-            // TODO: Check if this needs to be scheduled on a different thread.
-            initAudioFlingerLocked();
             // We restart the process instead of simply sending over the new binder, to avoid race
             // conditions with audio reading in the service.
             restartProcessLocked();
@@ -576,8 +588,31 @@
         }
 
         @Override
-        public void onError(int status) throws RemoteException {
-            mExternalCallback.onError(status);
+        public void onPreempted() throws RemoteException {
+            mExternalCallback.onSoundTriggerFailure(new SoundTriggerFailure(
+                        SoundTriggerFailure.ERROR_CODE_UNEXPECTED_PREEMPTION,
+                        "Unexpected startRecognition on already started ST session"));
+        }
+
+        @Override
+        public void onModuleDied() throws RemoteException {
+            mExternalCallback.onSoundTriggerFailure(new SoundTriggerFailure(
+                        SoundTriggerFailure.ERROR_CODE_MODULE_DIED,
+                        "STHAL died"));
+        }
+
+        @Override
+        public void onResumeFailed(int status) throws RemoteException {
+            mExternalCallback.onSoundTriggerFailure(new SoundTriggerFailure(
+                        SoundTriggerFailure.ERROR_CODE_RECOGNITION_RESUME_FAILED,
+                        "STService recognition resume failed with: " + status));
+        }
+
+        @Override
+        public void onPauseFailed(int status) throws RemoteException {
+            mExternalCallback.onSoundTriggerFailure(new SoundTriggerFailure(
+                        SoundTriggerFailure.ERROR_CODE_RECOGNITION_RESUME_FAILED,
+                        "STService recognition pause failed with: " + status));
         }
 
         @Override
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VisualQueryDetectorSession.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VisualQueryDetectorSession.java
index aadb38d..2e05e20 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VisualQueryDetectorSession.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VisualQueryDetectorSession.java
@@ -81,7 +81,12 @@
     void informRestartProcessLocked() {
         Slog.v(TAG, "informRestartProcessLocked");
         mUpdateStateAfterStartFinished.set(false);
-        //TODO(b/261783819): Starts detection in VisualQueryDetectionService.
+        try {
+            mCallback.onProcessRestarted();
+        } catch (RemoteException e) {
+            Slog.w(TAG, "Failed to communicate #onProcessRestarted", e);
+            notifyOnDetectorRemoteException();
+        }
     }
 
     void setVisualQueryDetectionAttentionListenerLocked(
diff --git a/telecomm/java/android/telecom/CallStreamingService.java b/telecomm/java/android/telecom/CallStreamingService.java
index 3f538a7..df48cd6 100644
--- a/telecomm/java/android/telecom/CallStreamingService.java
+++ b/telecomm/java/android/telecom/CallStreamingService.java
@@ -52,6 +52,7 @@
  * </service>
  * }
  * </pre>
+ *
  * @hide
  */
 @SystemApi
@@ -65,7 +66,7 @@
     private static final int MSG_SET_STREAMING_CALL_ADAPTER = 1;
     private static final int MSG_CALL_STREAMING_STARTED = 2;
     private static final int MSG_CALL_STREAMING_STOPPED = 3;
-    private static final int MSG_CALL_STREAMING_CHANGED_CHANGED = 4;
+    private static final int MSG_CALL_STREAMING_STATE_CHANGED = 4;
 
     /** Default Handler used to consolidate binder method calls onto a single thread. */
     private final Handler mHandler = new Handler(Looper.getMainLooper()) {
@@ -77,8 +78,10 @@
 
             switch (msg.what) {
                 case MSG_SET_STREAMING_CALL_ADAPTER:
-                    mStreamingCallAdapter = new StreamingCallAdapter(
-                            (IStreamingCallAdapter) msg.obj);
+                    if (msg.obj != null) {
+                        mStreamingCallAdapter = new StreamingCallAdapter(
+                                (IStreamingCallAdapter) msg.obj);
+                    }
                     break;
                 case MSG_CALL_STREAMING_STARTED:
                     mCall = (StreamingCall) msg.obj;
@@ -90,10 +93,12 @@
                     mStreamingCallAdapter = null;
                     CallStreamingService.this.onCallStreamingStopped();
                     break;
-                case MSG_CALL_STREAMING_CHANGED_CHANGED:
+                case MSG_CALL_STREAMING_STATE_CHANGED:
                     int state = (int) msg.obj;
-                    mCall.requestStreamingState(state);
-                    CallStreamingService.this.onCallStreamingStateChanged(state);
+                    if (mStreamingCallAdapter != null) {
+                        mCall.requestStreamingState(state);
+                        CallStreamingService.this.onCallStreamingStateChanged(state);
+                    }
                     break;
                 default:
                     break;
@@ -128,7 +133,7 @@
 
         @Override
         public void onCallStreamingStateChanged(int state) throws RemoteException {
-            mHandler.obtainMessage(MSG_CALL_STREAMING_CHANGED_CHANGED, state).sendToTarget();
+            mHandler.obtainMessage(MSG_CALL_STREAMING_STATE_CHANGED, state).sendToTarget();
         }
     }
 
@@ -173,9 +178,12 @@
                     STREAMING_FAILED_ALREADY_STREAMING,
                     STREAMING_FAILED_NO_SENDER,
                     STREAMING_FAILED_SENDER_BINDING_ERROR
-    })
+            })
     @Retention(RetentionPolicy.SOURCE)
-    public @interface StreamingFailedReason {};
+    public @interface StreamingFailedReason {
+    }
+
+    ;
 
     /**
      * Called when a {@code StreamingCall} has been added to this call streaming session. The call
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/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 7abae18..f27c23b 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -7640,6 +7640,25 @@
         public static final String KEY_EMERGENCY_SCAN_TIMER_SEC_INT =
                 KEY_PREFIX + "emergency_scan_timer_sec_int";
 
+        /**
+         * The timer to wait for the call completion on the cellular network before attempting the
+         * call over Wi-Fi. On timer expiry, if emergency call on Wi-Fi is allowed and possible,
+         * telephony shall cancel the scan on the cellular network and place the call on Wi-Fi.
+         * If dialing over cellular network is ongoing when timer expires, dialing over Wi-Fi
+         * will be requested only when the ongoing dialing fails. If emergency call on Wi-Fi is not
+         * possible, then domain selection continues to try dialing from the radio and the timer
+         * remains expired. Later when calling over Wi-Fi is possible and dialing over cellular
+         * networks fails, calling over Wi-Fi will be requested. The timer shall be restarted from
+         * initial state if calling over Wi-Fi fails.
+         * If this value is set to {@link #REDIAL_TIMER_DISABLED}, then the timer will never be
+         * started.
+         *
+         * The default value for the timer is {@link #REDIAL_TIMER_DISABLED}.
+         * @hide
+         */
+        public static final String KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT =
+                KEY_PREFIX + "maximum_cellular_search_timer_sec_int";
+
         /** @hide */
         @IntDef(prefix = "SCAN_TYPE_",
             value = {
@@ -7734,10 +7753,12 @@
                 KEY_PREFIX + "emergency_requires_volte_enabled_bool";
 
         /**
-         * This values indicates that the cross SIM redialing timer shall be disabled.
+         * This values indicates that the cross SIM redialing timer and maximum celluar search
+         * timer shall be disabled.
          *
          * @see #KEY_CROSS_STACK_REDIAL_TIMER_SEC_INT
          * @see #KEY_QUICK_CROSS_STACK_REDIAL_TIMER_SEC_INT
+         * @see #KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT
          * @hide
          */
         public static final int REDIAL_TIMER_DISABLED = 0;
@@ -7841,6 +7862,7 @@
             defaults.putInt(KEY_EMERGENCY_VOWIFI_REQUIRES_CONDITION_INT, VOWIFI_REQUIRES_NONE);
             defaults.putInt(KEY_MAXIMUM_NUMBER_OF_EMERGENCY_TRIES_OVER_VOWIFI_INT, 1);
             defaults.putInt(KEY_EMERGENCY_SCAN_TIMER_SEC_INT, 10);
+            defaults.putInt(KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT, REDIAL_TIMER_DISABLED);
             defaults.putInt(KEY_EMERGENCY_NETWORK_SCAN_TYPE_INT, SCAN_TYPE_NO_PREFERENCE);
             defaults.putInt(KEY_EMERGENCY_CALL_SETUP_TIMER_ON_CURRENT_NETWORK_SEC_INT, 0);
             defaults.putBoolean(KEY_EMERGENCY_REQUIRES_IMS_REGISTRATION_BOOL, false);
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index 78c6196..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);
     }
 
     /**
@@ -3142,10 +3062,10 @@
      *
      * Only supported for embedded subscriptions (if {@link SubscriptionInfo#isEmbedded} returns
      * true). To check for permissions for non-embedded subscription as well,
+     * see {@link android.telephony.TelephonyManager#hasCarrierPrivileges}.
      *
      * @param info The subscription to check.
      * @return whether the app is authorized to manage this subscription per its metadata.
-     *
      * @see android.telephony.TelephonyManager#hasCarrierPrivileges
      */
     public boolean canManageSubscription(SubscriptionInfo info) {
@@ -3159,12 +3079,12 @@
      *
      * Only supported for embedded subscriptions (if {@link SubscriptionInfo#isEmbedded} returns
      * true). To check for permissions for non-embedded subscription as well,
+     * see {@link android.telephony.TelephonyManager#hasCarrierPrivileges}.
      *
      * @param info The subscription to check.
      * @param packageName Package name of the app to check.
      *
      * @return whether the app is authorized to manage this subscription per its access rules.
-     *
      * @see android.telephony.TelephonyManager#hasCarrierPrivileges
      * @hide
      */
@@ -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/UiccCardInfo.java b/telephony/java/android/telephony/UiccCardInfo.java
index e5e8f0a..6c069d4 100644
--- a/telephony/java/android/telephony/UiccCardInfo.java
+++ b/telephony/java/android/telephony/UiccCardInfo.java
@@ -166,7 +166,7 @@
                 + " Please Use UiccPortInfo API instead");
         }
         //always return ICCID from first port.
-        return getPorts().stream().findFirst().get().getIccId();
+        return mPortList.isEmpty() ? null : mPortList.get(0).getIccId();
     }
 
     /**
diff --git a/telephony/java/android/telephony/UiccSlotInfo.java b/telephony/java/android/telephony/UiccSlotInfo.java
index 1863a03b..dda7349 100644
--- a/telephony/java/android/telephony/UiccSlotInfo.java
+++ b/telephony/java/android/telephony/UiccSlotInfo.java
@@ -139,14 +139,16 @@
     public UiccSlotInfo(boolean isEuicc, String cardId,
             @CardStateInfo int cardStateInfo, boolean isExtendedApduSupported,
             boolean isRemovable, @NonNull List<UiccPortInfo> portList) {
-        this.mIsActive = portList.get(0).isActive();
         this.mIsEuicc = isEuicc;
         this.mCardId = cardId;
         this.mCardStateInfo = cardStateInfo;
-        this.mLogicalSlotIdx = portList.get(0).getLogicalSlotIndex();
         this.mIsExtendedApduSupported = isExtendedApduSupported;
         this.mIsRemovable = isRemovable;
         this.mPortList = portList;
+        this.mIsActive = !portList.isEmpty() && portList.get(0).isActive();
+        this.mLogicalSlotIdx = portList.isEmpty()
+                ? SubscriptionManager.INVALID_PHONE_INDEX
+                : portList.get(0).getLogicalSlotIndex();
     }
 
     /**
@@ -164,8 +166,7 @@
             throw new UnsupportedOperationException("getIsActive() is not supported by "
             + "UiccSlotInfo. Please Use UiccPortInfo API instead");
         }
-        //always return status from first port.
-        return getPorts().stream().findFirst().get().isActive();
+        return mIsActive;
     }
 
     public boolean getIsEuicc() {
@@ -202,9 +203,7 @@
             throw new UnsupportedOperationException("getLogicalSlotIdx() is not supported by "
                 + "UiccSlotInfo. Please use UiccPortInfo API instead");
         }
-        //always return logical slot index from first port.
-        //portList always have at least one element.
-        return getPorts().stream().findFirst().get().getLogicalSlotIndex();
+        return mLogicalSlotIdx;
     }
 
     /**
diff --git a/telephony/java/android/telephony/satellite/PointingInfo.java b/telephony/java/android/telephony/satellite/PointingInfo.java
index e8a8576..a559b32 100644
--- a/telephony/java/android/telephony/satellite/PointingInfo.java
+++ b/telephony/java/android/telephony/satellite/PointingInfo.java
@@ -17,7 +17,6 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
-import android.compat.annotation.UnsupportedAppUsage;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -34,7 +33,7 @@
     /**
      * @hide
      */
-    @UnsupportedAppUsage
+
     public PointingInfo(float satelliteAzimuthDegrees, float satelliteElevationDegrees) {
         mSatelliteAzimuthDegrees = satelliteAzimuthDegrees;
         mSatelliteElevationDegrees = satelliteElevationDegrees;
diff --git a/telephony/java/android/telephony/satellite/SatelliteCapabilities.java b/telephony/java/android/telephony/satellite/SatelliteCapabilities.java
index 0092890..6856cc0 100644
--- a/telephony/java/android/telephony/satellite/SatelliteCapabilities.java
+++ b/telephony/java/android/telephony/satellite/SatelliteCapabilities.java
@@ -17,7 +17,6 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
-import android.compat.annotation.UnsupportedAppUsage;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -57,7 +56,6 @@
     /**
      * @hide
      */
-    @UnsupportedAppUsage
     public SatelliteCapabilities(Set<Integer> supportedRadioTechnologies,
             boolean isPointingRequired, int maxBytesPerOutgoingDatagram,
             @NonNull Map<Integer, AntennaPosition> antennaPositionMap) {
diff --git a/telephony/java/android/telephony/satellite/SatelliteDatagram.java b/telephony/java/android/telephony/satellite/SatelliteDatagram.java
index 44f56f3..d3cb8a0 100644
--- a/telephony/java/android/telephony/satellite/SatelliteDatagram.java
+++ b/telephony/java/android/telephony/satellite/SatelliteDatagram.java
@@ -17,7 +17,6 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
-import android.compat.annotation.UnsupportedAppUsage;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -33,7 +32,6 @@
     /**
      * @hide
      */
-    @UnsupportedAppUsage
     public SatelliteDatagram(@NonNull byte[] data) {
         mData = data;
     }
diff --git a/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java b/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java
index d0409bf..b2dec71 100644
--- a/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java
+++ b/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java
@@ -17,7 +17,6 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
-import android.compat.annotation.UnsupportedAppUsage;
 
 import java.util.function.Consumer;
 
@@ -37,7 +36,6 @@
      *                 that they received the datagram. If the callback is not received within
      *                 five minutes, Telephony will resend the datagram.
      */
-    @UnsupportedAppUsage
     void onSatelliteDatagramReceived(long datagramId, @NonNull SatelliteDatagram datagram,
             int pendingCount, @NonNull Consumer<Void> callback);
 }
diff --git a/telephony/java/android/telephony/satellite/SatelliteManager.java b/telephony/java/android/telephony/satellite/SatelliteManager.java
index 5681ab2..c5830b8 100644
--- a/telephony/java/android/telephony/satellite/SatelliteManager.java
+++ b/telephony/java/android/telephony/satellite/SatelliteManager.java
@@ -23,7 +23,6 @@
 import android.annotation.Nullable;
 import android.annotation.RequiresFeature;
 import android.annotation.RequiresPermission;
-import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.os.Binder;
@@ -37,8 +36,8 @@
 import android.telephony.TelephonyFrameworkInitializer;
 
 import com.android.internal.telephony.IIntegerConsumer;
-import com.android.internal.telephony.IVoidConsumer;
 import com.android.internal.telephony.ITelephony;
+import com.android.internal.telephony.IVoidConsumer;
 import com.android.telephony.Rlog;
 
 import java.lang.annotation.Retention;
@@ -83,7 +82,7 @@
      * @param context The context the SatelliteManager belongs to.
      * @hide
      */
-    @UnsupportedAppUsage
+
     public SatelliteManager(@Nullable Context context) {
         this(context, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
     }
@@ -129,7 +128,7 @@
      * {@link #requestIsSatelliteEnabled(Executor, OutcomeReceiver)}.
      * @hide
      */
-    @UnsupportedAppUsage
+
     public static final String KEY_SATELLITE_ENABLED = "satellite_enabled";
 
     /**
@@ -137,7 +136,7 @@
      * {@link #requestIsDemoModeEnabled(Executor, OutcomeReceiver)}.
      * @hide
      */
-    @UnsupportedAppUsage
+
     public static final String KEY_DEMO_MODE_ENABLED = "demo_mode_enabled";
 
     /**
@@ -145,7 +144,7 @@
      * {@link #requestIsSatelliteSupported(Executor, OutcomeReceiver)}.
      * @hide
      */
-    @UnsupportedAppUsage
+
     public static final String KEY_SATELLITE_SUPPORTED = "satellite_supported";
 
     /**
@@ -153,7 +152,7 @@
      * {@link #requestSatelliteCapabilities(Executor, OutcomeReceiver)}.
      * @hide
      */
-    @UnsupportedAppUsage
+
     public static final String KEY_SATELLITE_CAPABILITIES = "satellite_capabilities";
 
     /**
@@ -161,7 +160,7 @@
      * {@link #requestIsSatelliteProvisioned(Executor, OutcomeReceiver)}.
      * @hide
      */
-    @UnsupportedAppUsage
+
     public static final String KEY_SATELLITE_PROVISIONED = "satellite_provisioned";
 
     /**
@@ -169,7 +168,7 @@
      * {@link #requestIsSatelliteCommunicationAllowedForCurrentLocation(Executor, OutcomeReceiver)}.
      * @hide
      */
-    @UnsupportedAppUsage
+
     public static final String KEY_SATELLITE_COMMUNICATION_ALLOWED =
             "satellite_communication_allowed";
 
@@ -178,7 +177,7 @@
      * {@link #requestTimeForNextSatelliteVisibility(Executor, OutcomeReceiver)}.
      * @hide
      */
-    @UnsupportedAppUsage
+
     public static final String KEY_SATELLITE_NEXT_VISIBILITY = "satellite_next_visibility";
 
     /**
@@ -389,7 +388,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void requestSatelliteEnabled(boolean enableSatellite, boolean enableDemoMode,
             @NonNull @CallbackExecutor Executor executor,
             @SatelliteError @NonNull Consumer<Integer> resultListener) {
@@ -432,7 +431,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void requestIsSatelliteEnabled(@NonNull @CallbackExecutor Executor executor,
             @NonNull OutcomeReceiver<Boolean, SatelliteException> callback) {
         Objects.requireNonNull(executor);
@@ -487,7 +486,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void requestIsDemoModeEnabled(@NonNull @CallbackExecutor Executor executor,
             @NonNull OutcomeReceiver<Boolean, SatelliteException> callback) {
         Objects.requireNonNull(executor);
@@ -540,7 +539,7 @@
      *
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
-    @UnsupportedAppUsage
+
     public void requestIsSatelliteSupported(@NonNull @CallbackExecutor Executor executor,
             @NonNull OutcomeReceiver<Boolean, SatelliteException> callback) {
         Objects.requireNonNull(executor);
@@ -594,7 +593,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void requestSatelliteCapabilities(@NonNull @CallbackExecutor Executor executor,
             @NonNull OutcomeReceiver<SatelliteCapabilities, SatelliteException> callback) {
         Objects.requireNonNull(executor);
@@ -787,7 +786,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void startSatelliteTransmissionUpdates(@NonNull @CallbackExecutor Executor executor,
             @SatelliteError @NonNull Consumer<Integer> resultListener,
             @NonNull SatelliteTransmissionUpdateCallback callback) {
@@ -857,7 +856,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void stopSatelliteTransmissionUpdates(
             @NonNull SatelliteTransmissionUpdateCallback callback,
             @NonNull @CallbackExecutor Executor executor,
@@ -913,7 +912,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void provisionSatelliteService(@NonNull String token, @NonNull byte[] provisionData,
             @Nullable CancellationSignal cancellationSignal,
             @NonNull @CallbackExecutor Executor executor,
@@ -963,7 +962,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void deprovisionSatelliteService(@NonNull String token,
             @NonNull @CallbackExecutor Executor executor,
             @SatelliteError @NonNull Consumer<Integer> resultListener) {
@@ -1003,7 +1002,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     @SatelliteError public int registerForSatelliteProvisionStateChanged(
             @NonNull @CallbackExecutor Executor executor,
             @NonNull SatelliteProvisionStateCallback callback) {
@@ -1046,7 +1045,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void unregisterForSatelliteProvisionStateChanged(
             @NonNull SatelliteProvisionStateCallback callback) {
         Objects.requireNonNull(callback);
@@ -1085,7 +1084,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void requestIsSatelliteProvisioned(@NonNull @CallbackExecutor Executor executor,
             @NonNull OutcomeReceiver<Boolean, SatelliteException> callback) {
         Objects.requireNonNull(executor);
@@ -1137,7 +1136,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     @SatelliteError public int registerForSatelliteModemStateChanged(
             @NonNull @CallbackExecutor Executor executor,
             @NonNull SatelliteStateCallback callback) {
@@ -1177,7 +1176,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void unregisterForSatelliteModemStateChanged(@NonNull SatelliteStateCallback callback) {
         Objects.requireNonNull(callback);
         ISatelliteStateCallback internalCallback = sSatelliteStateCallbackMap.remove(callback);
@@ -1212,7 +1211,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     @SatelliteError public int registerForSatelliteDatagram(
             @NonNull @CallbackExecutor Executor executor,
             @NonNull SatelliteDatagramCallback callback) {
@@ -1268,7 +1267,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void unregisterForSatelliteDatagram(@NonNull SatelliteDatagramCallback callback) {
         Objects.requireNonNull(callback);
         ISatelliteDatagramCallback internalCallback =
@@ -1306,7 +1305,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void pollPendingSatelliteDatagrams(@NonNull @CallbackExecutor Executor executor,
             @SatelliteError @NonNull Consumer<Integer> resultListener) {
         Objects.requireNonNull(executor);
@@ -1359,7 +1358,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void sendSatelliteDatagram(@DatagramType int datagramType,
             @NonNull SatelliteDatagram datagram, boolean needFullScreenPointingUI,
             @NonNull @CallbackExecutor Executor executor,
@@ -1405,7 +1404,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void requestIsSatelliteCommunicationAllowedForCurrentLocation(
             @NonNull @CallbackExecutor Executor executor,
             @NonNull OutcomeReceiver<Boolean, SatelliteException> callback) {
@@ -1463,7 +1462,7 @@
      * @throws IllegalStateException if the Telephony process is not currently available.
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
-    @UnsupportedAppUsage
+
     public void requestTimeForNextSatelliteVisibility(@NonNull @CallbackExecutor Executor executor,
             @NonNull OutcomeReceiver<Duration, SatelliteException> callback) {
         Objects.requireNonNull(executor);
diff --git a/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java b/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java
index 20875af..a62eb8b 100644
--- a/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java
+++ b/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java
@@ -16,8 +16,6 @@
 
 package android.telephony.satellite;
 
-import android.compat.annotation.UnsupportedAppUsage;
-
 /**
  * A callback class for monitoring satellite provision state change events.
  *
@@ -30,6 +28,5 @@
      * @param provisioned The new provision state. {@code true} means satellite is provisioned
      *                    {@code false} means satellite is not provisioned.
      */
-    @UnsupportedAppUsage
     void onSatelliteProvisionStateChanged(boolean provisioned);
 }
diff --git a/telephony/java/android/telephony/satellite/SatelliteStateCallback.java b/telephony/java/android/telephony/satellite/SatelliteStateCallback.java
index 3312e3a..d9ecaa3 100644
--- a/telephony/java/android/telephony/satellite/SatelliteStateCallback.java
+++ b/telephony/java/android/telephony/satellite/SatelliteStateCallback.java
@@ -16,8 +16,6 @@
 
 package android.telephony.satellite;
 
-import android.compat.annotation.UnsupportedAppUsage;
-
 /**
  * A callback class for monitoring satellite modem state change events.
  *
@@ -28,6 +26,5 @@
      * Called when satellite modem state changes.
      * @param state The new satellite modem state.
      */
-    @UnsupportedAppUsage
     void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state);
 }
diff --git a/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java b/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java
index 17fff44..d4fe57a 100644
--- a/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java
+++ b/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java
@@ -17,7 +17,6 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
-import android.compat.annotation.UnsupportedAppUsage;
 
 /**
  * A callback class for monitoring satellite position update and datagram transfer state change
@@ -31,7 +30,6 @@
      *
      * @param pointingInfo The pointing info containing the satellite location.
      */
-    @UnsupportedAppUsage
     void onSatellitePositionChanged(@NonNull PointingInfo pointingInfo);
 
     /**
@@ -41,7 +39,6 @@
      * @param sendPendingCount The number of datagrams that are currently being sent.
      * @param errorCode If datagram transfer failed, the reason for failure.
      */
-    @UnsupportedAppUsage
     void onSendDatagramStateChanged(
             @SatelliteManager.SatelliteDatagramTransferState int state, int sendPendingCount,
             @SatelliteManager.SatelliteError int errorCode);
@@ -53,7 +50,6 @@
      * @param receivePendingCount The number of datagrams that are currently pending to be received.
      * @param errorCode If datagram transfer failed, the reason for failure.
      */
-    @UnsupportedAppUsage
     void onReceiveDatagramStateChanged(
             @SatelliteManager.SatelliteDatagramTransferState int state, int receivePendingCount,
             @SatelliteManager.SatelliteError int errorCode);
diff --git a/core/java/com/android/internal/expresslog/Utils.java b/telephony/java/android/telephony/satellite/stub/ISatelliteGateway.aidl
similarity index 62%
copy from core/java/com/android/internal/expresslog/Utils.java
copy to telephony/java/android/telephony/satellite/stub/ISatelliteGateway.aidl
index d82192f..4f1a136 100644
--- a/core/java/com/android/internal/expresslog/Utils.java
+++ b/telephony/java/android/telephony/satellite/stub/ISatelliteGateway.aidl
@@ -14,8 +14,13 @@
  * limitations under the License.
  */
 
-package com.android.internal.expresslog;
+package android.telephony.satellite.stub;
 
-final class Utils {
-    static native long hashString(String stringToHash);
+/**
+ * {@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/AndroidTest.xml b/tests/FlickerTests/AndroidTest.xml
index f2ffc19..7272abb 100644
--- a/tests/FlickerTests/AndroidTest.xml
+++ b/tests/FlickerTests/AndroidTest.xml
@@ -29,6 +29,7 @@
         <option name="teardown-command" value="settings delete secure show_ime_with_hard_keyboard" />
         <option name="teardown-command" value="settings delete system show_touches" />
         <option name="teardown-command" value="settings delete system pointer_location" />
+        <option name="teardown-command" value="cmd overlay enable com.android.internal.systemui.navbar.gestural" />
     </target_preparer>
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true"/>
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/PipAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/PipAppHelper.kt
index a72c12d..c5a21a8 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/PipAppHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/PipAppHelper.kt
@@ -250,7 +250,10 @@
             waitConditions = arrayOf(ConditionsFactory.hasPipWindow())
         )
 
-        wmHelper.StateSyncBuilder().withPipShown().waitForAndVerify()
+        wmHelper.StateSyncBuilder()
+            .withWindowSurfaceAppeared(this)
+            .withPipShown()
+            .waitForAndVerify()
     }
 
     /** Expand the PIP window back to full screen via intent and wait until the app is visible */
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/HandwritingIme/src/com/google/android/test/handwritingime/BoundsInfoDrawHelper.java b/tests/HandwritingIme/src/com/google/android/test/handwritingime/BoundsInfoDrawHelper.java
new file mode 100644
index 0000000..6b924f3
--- /dev/null
+++ b/tests/HandwritingIme/src/com/google/android/test/handwritingime/BoundsInfoDrawHelper.java
@@ -0,0 +1,116 @@
+/*
+ * 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.google.android.test.handwritingime;
+
+import static com.google.android.test.handwritingime.HandwritingIme.BOUNDS_INFO_EDITOR_BOUNDS;
+import static com.google.android.test.handwritingime.HandwritingIme.BOUNDS_INFO_NONE;
+import static com.google.android.test.handwritingime.HandwritingIme.BOUNDS_INFO_VISIBLE_LINE_BOUNDS;
+
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.view.View;
+import android.view.inputmethod.CursorAnchorInfo;
+import android.view.inputmethod.EditorBoundsInfo;
+
+import androidx.annotation.Nullable;
+
+import com.android.internal.graphics.ColorUtils;
+
+import java.util.List;
+
+public class BoundsInfoDrawHelper {
+    private static final Paint sPaint = new Paint();
+    private static final int EDITOR_BOUNDS_COLOR =
+            ColorUtils.setAlphaComponent(Color.DKGRAY, 128);
+    private static final int HANDWRITING_BOUNDS_COLOR =
+            ColorUtils.setAlphaComponent(Color.BLUE, 128);
+    private static final int VISIBLE_LINE_BOUNDS_COLOR =
+            ColorUtils.setAlphaComponent(Color.MAGENTA, 128);
+
+    public static void draw(Canvas canvas, View inkView, int boundsInfoMode,
+            CursorAnchorInfo cursorAnchorInfo) {
+        if (boundsInfoMode == BOUNDS_INFO_NONE || cursorAnchorInfo == null) {
+            return;
+        }
+
+        // The matrix in CursorAnchorInfo transforms the editor coordinates to on-screen
+        // coordinates. We then transform the matrix from the on-screen coordinates to the
+        // inkView's coordinates. So the result matrix transforms the editor coordinates
+        // to the inkView coordinates.
+        final Matrix matrix = cursorAnchorInfo.getMatrix();
+        inkView.transformMatrixToLocal(matrix);
+
+        if ((boundsInfoMode & BOUNDS_INFO_EDITOR_BOUNDS) != 0) {
+            drawEditorBoundsInfo(canvas, matrix, cursorAnchorInfo.getEditorBoundsInfo());
+        }
+
+        if ((boundsInfoMode & BOUNDS_INFO_VISIBLE_LINE_BOUNDS) != 0) {
+            drawVisibleLineBounds(canvas, matrix, cursorAnchorInfo.getVisibleLineBounds());
+        }
+    }
+
+    private static void setPaintForEditorBoundsInfo() {
+        sPaint.reset();
+        sPaint.setStyle(Paint.Style.STROKE);
+        sPaint.setStrokeWidth(5f);
+    }
+
+    private static void drawEditorBoundsInfo(Canvas canvas, Matrix matrix,
+            @Nullable EditorBoundsInfo editorBoundsInfo) {
+        if (editorBoundsInfo == null) {
+            return;
+        }
+        final RectF editorBounds = editorBoundsInfo.getEditorBounds();
+        setPaintForEditorBoundsInfo();
+        if (editorBounds != null) {
+            final RectF localEditorBounds = new RectF(editorBounds);
+            matrix.mapRect(localEditorBounds);
+            sPaint.setColor(EDITOR_BOUNDS_COLOR);
+            canvas.drawRect(localEditorBounds, sPaint);
+        }
+
+        final RectF handwritingBounds = editorBoundsInfo.getHandwritingBounds();
+        if (handwritingBounds != null) {
+            final RectF localHandwritingBounds = new RectF(handwritingBounds);
+            matrix.mapRect(localHandwritingBounds);
+            sPaint.setColor(HANDWRITING_BOUNDS_COLOR);
+            canvas.drawRect(localHandwritingBounds, sPaint);
+        }
+    }
+
+    private static void setPaintForVisibleLineBounds() {
+        sPaint.reset();
+        sPaint.setStyle(Paint.Style.STROKE);
+        sPaint.setStrokeWidth(2f);
+        sPaint.setColor(VISIBLE_LINE_BOUNDS_COLOR);
+    }
+
+    private static void drawVisibleLineBounds(Canvas canvas, Matrix matrix,
+            List<RectF> visibleLineBounds) {
+        if (visibleLineBounds.isEmpty()) {
+            return;
+        }
+        setPaintForVisibleLineBounds();
+        for (RectF lineBound : visibleLineBounds) {
+            matrix.mapRect(lineBound);
+            canvas.drawRect(lineBound, sPaint);
+        }
+    }
+}
diff --git a/tests/HandwritingIme/src/com/google/android/test/handwritingime/HandwritingIme.java b/tests/HandwritingIme/src/com/google/android/test/handwritingime/HandwritingIme.java
index 2fd2368..8380dcf 100644
--- a/tests/HandwritingIme/src/com/google/android/test/handwritingime/HandwritingIme.java
+++ b/tests/HandwritingIme/src/com/google/android/test/handwritingime/HandwritingIme.java
@@ -25,7 +25,9 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
+import android.view.inputmethod.CursorAnchorInfo;
 import android.view.inputmethod.DeleteGesture;
+import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.HandwritingGesture;
 import android.view.inputmethod.InputConnection;
 import android.view.inputmethod.InsertGesture;
@@ -34,6 +36,7 @@
 import android.view.inputmethod.SelectGesture;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
+import android.widget.CheckBox;
 import android.widget.FrameLayout;
 import android.widget.LinearLayout;
 import android.widget.Spinner;
@@ -43,9 +46,6 @@
 import java.util.function.IntConsumer;
 
 public class HandwritingIme extends InputMethodService {
-
-    public static final int HEIGHT_DP = 100;
-
     private static final int OP_NONE = 0;
     private static final int OP_SELECT = 1;
     private static final int OP_DELETE = 2;
@@ -62,6 +62,12 @@
     private Spinner mRichGestureGranularitySpinner;
     private PointF mRichGestureStartPoint;
 
+    static final int BOUNDS_INFO_NONE = 0;
+    static final int BOUNDS_INFO_VISIBLE_LINE_BOUNDS = 1;
+    static final int BOUNDS_INFO_EDITOR_BOUNDS = 2;
+    private int mBoundsInfoMode = BOUNDS_INFO_NONE;
+    private LinearLayout mBoundsInfoCheckBoxes;
+
     private final IntConsumer mResultConsumer = value -> Log.d(TAG, "Gesture result: " + value);
 
     interface HandwritingFinisher {
@@ -201,12 +207,7 @@
     public View onCreateInputView() {
         Log.d(TAG, "onCreateInputView");
         final ViewGroup view = new FrameLayout(this);
-        final View inner = new View(this);
-        final float density = getResources().getDisplayMetrics().density;
-        final int height = (int) (HEIGHT_DP * density);
         view.setPadding(0, 0, 0, 0);
-        view.addView(inner, new FrameLayout.LayoutParams(
-                FrameLayout.LayoutParams.MATCH_PARENT, height));
 
         LinearLayout layout = new LinearLayout(this);
         layout.setLayoutParams(new LinearLayout.LayoutParams(
@@ -214,9 +215,9 @@
         layout.setOrientation(LinearLayout.VERTICAL);
         layout.addView(getRichGestureActionsSpinner());
         layout.addView(getRichGestureGranularitySpinner());
-
+        layout.addView(getBoundsInfoCheckBoxes());
+        layout.setBackgroundColor(getColor(R.color.holo_green_light));
         view.addView(layout);
-        inner.setBackgroundColor(getColor(R.color.holo_green_light));
 
         return view;
     }
@@ -228,7 +229,7 @@
         mRichGestureModeSpinner = new Spinner(this);
         mRichGestureModeSpinner.setPadding(100, 0, 100, 0);
         mRichGestureModeSpinner.setTooltipText("Handwriting IME mode");
-        String[] items = new String[] {
+        String[] items = new String[]{
                 "Handwriting IME - Rich gesture disabled",
                 "Rich gesture SELECT",
                 "Rich gesture DELETE",
@@ -259,6 +260,69 @@
         return mRichGestureModeSpinner;
     }
 
+    private void updateCursorAnchorInfo(int boundsInfoMode) {
+        final InputConnection ic = getCurrentInputConnection();
+        if (ic == null) return;
+
+        if (boundsInfoMode == BOUNDS_INFO_NONE) {
+            ic.requestCursorUpdates(0);
+            return;
+        }
+
+        final int cursorUpdateMode = InputConnection.CURSOR_UPDATE_MONITOR;
+        int cursorUpdateFilter = 0;
+        if ((boundsInfoMode & BOUNDS_INFO_EDITOR_BOUNDS) != 0) {
+            cursorUpdateFilter |= InputConnection.CURSOR_UPDATE_FILTER_EDITOR_BOUNDS;
+        }
+
+        if ((boundsInfoMode & BOUNDS_INFO_VISIBLE_LINE_BOUNDS) != 0) {
+            cursorUpdateFilter |= InputConnection.CURSOR_UPDATE_FILTER_VISIBLE_LINE_BOUNDS;
+        }
+        ic.requestCursorUpdates(cursorUpdateMode | cursorUpdateFilter);
+    }
+
+    private void updateBoundsInfoMode() {
+        if (mInk != null) {
+            mInk.setBoundsInfoMode(mBoundsInfoMode);
+        }
+        updateCursorAnchorInfo(mBoundsInfoMode);
+    }
+
+    private View getBoundsInfoCheckBoxes() {
+        if (mBoundsInfoCheckBoxes != null) {
+            return mBoundsInfoCheckBoxes;
+        }
+        mBoundsInfoCheckBoxes = new LinearLayout(this);
+        mBoundsInfoCheckBoxes.setPadding(100, 0, 100, 0);
+        mBoundsInfoCheckBoxes.setOrientation(LinearLayout.HORIZONTAL);
+
+        final CheckBox editorBoundsInfoCheckBox = new CheckBox(this);
+        editorBoundsInfoCheckBox.setText("EditorBoundsInfo");
+        editorBoundsInfoCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
+            if (isChecked) {
+                mBoundsInfoMode |= BOUNDS_INFO_EDITOR_BOUNDS;
+            } else {
+                mBoundsInfoMode &= ~BOUNDS_INFO_EDITOR_BOUNDS;
+            }
+            updateBoundsInfoMode();
+        });
+
+        final CheckBox visibleLineBoundsInfoCheckBox = new CheckBox(this);
+        visibleLineBoundsInfoCheckBox.setText("VisibleLineBounds");
+        visibleLineBoundsInfoCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
+            if (isChecked) {
+                mBoundsInfoMode |= BOUNDS_INFO_VISIBLE_LINE_BOUNDS;
+            } else {
+                mBoundsInfoMode &= ~BOUNDS_INFO_VISIBLE_LINE_BOUNDS;
+            }
+            updateBoundsInfoMode();
+        });
+
+        mBoundsInfoCheckBoxes.addView(editorBoundsInfoCheckBox);
+        mBoundsInfoCheckBoxes.addView(visibleLineBoundsInfoCheckBox);
+        return mBoundsInfoCheckBoxes;
+    }
+
     private View getRichGestureGranularitySpinner() {
         if (mRichGestureGranularitySpinner != null) {
             return mRichGestureGranularitySpinner;
@@ -294,6 +358,7 @@
         Log.d(TAG, "onPrepareStylusHandwriting ");
         if (mInk == null) {
             mInk = new InkView(this, new HandwritingFinisherImpl(), new StylusConsumer());
+            mInk.setBoundsInfoMode(mBoundsInfoMode);
         }
     }
 
@@ -323,4 +388,16 @@
     private boolean areRichGesturesEnabled() {
         return mRichGestureMode != OP_NONE;
     }
+
+    @Override
+    public void onUpdateCursorAnchorInfo(CursorAnchorInfo cursorAnchorInfo) {
+        if (mInk != null) {
+            mInk.setCursorAnchorInfo(cursorAnchorInfo);
+        }
+    }
+
+    @Override
+    public void onStartInput(EditorInfo attribute, boolean restarting) {
+        updateCursorAnchorInfo(mBoundsInfoMode);
+    }
 }
diff --git a/tests/HandwritingIme/src/com/google/android/test/handwritingime/InkView.java b/tests/HandwritingIme/src/com/google/android/test/handwritingime/InkView.java
index e94c79e..86b324c 100644
--- a/tests/HandwritingIme/src/com/google/android/test/handwritingime/InkView.java
+++ b/tests/HandwritingIme/src/com/google/android/test/handwritingime/InkView.java
@@ -26,6 +26,7 @@
 import android.view.ViewGroup;
 import android.view.WindowManager;
 import android.view.WindowMetrics;
+import android.view.inputmethod.CursorAnchorInfo;
 
 class InkView extends View {
     private static final long FINISH_TIMEOUT = 1500;
@@ -37,6 +38,9 @@
     private static final float STYLUS_MOVE_TOLERANCE = 1;
     private Runnable mFinishRunnable;
 
+    private CursorAnchorInfo mCursorAnchorInfo;
+    private int mBoundsInfoMode;
+
     InkView(Context context, HandwritingIme.HandwritingFinisher hwController,
             HandwritingIme.StylusConsumer consumer) {
         super(context);
@@ -66,6 +70,7 @@
 
         canvas.drawPath(mPath, mPaint);
         canvas.drawARGB(20, 255, 50, 50);
+        BoundsInfoDrawHelper.draw(canvas, this, mBoundsInfoMode, mCursorAnchorInfo);
     }
 
     private void stylusStart(float x, float y) {
@@ -156,4 +161,15 @@
         return mFinishRunnable;
     }
 
+    void setCursorAnchorInfo(CursorAnchorInfo cursorAnchorInfo) {
+        mCursorAnchorInfo = cursorAnchorInfo;
+        invalidate();
+    }
+
+    void setBoundsInfoMode(int boundsInfoMode) {
+        if (boundsInfoMode != mBoundsInfoMode) {
+            invalidate();
+        }
+        mBoundsInfoMode = boundsInfoMode;
+    }
 }
diff --git a/tests/Input/Android.bp b/tests/Input/Android.bp
index a4c48fd..4fa6fbe 100644
--- a/tests/Input/Android.bp
+++ b/tests/Input/Android.bp
@@ -25,7 +25,7 @@
         "services.core.unboosted",
         "testables",
         "truth-prebuilt",
-        "ub-uiautomator",
+        "androidx.test.uiautomator_uiautomator",
     ],
     test_suites: ["device-tests"],
 }
diff --git a/tests/Input/src/com/android/test/input/AnrTest.kt b/tests/Input/src/com/android/test/input/AnrTest.kt
index 0246426..d185ee6 100644
--- a/tests/Input/src/com/android/test/input/AnrTest.kt
+++ b/tests/Input/src/com/android/test/input/AnrTest.kt
@@ -27,14 +27,15 @@
 import android.os.SystemClock
 import android.provider.Settings
 import android.provider.Settings.Global.HIDE_ERROR_DIALOGS
-import android.support.test.uiautomator.By
-import android.support.test.uiautomator.UiDevice
-import android.support.test.uiautomator.UiObject2
-import android.support.test.uiautomator.Until
 import android.testing.PollingCheck
 import android.view.InputDevice
 import android.view.MotionEvent
 
+import androidx.test.uiautomator.By
+import androidx.test.uiautomator.UiDevice
+import androidx.test.uiautomator.UiObject2
+import androidx.test.uiautomator.Until
+
 import org.junit.After
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
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/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java
index f8d885a..d7fa124 100644
--- a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java
+++ b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java
@@ -417,9 +417,9 @@
                         int failureReason, int mitigationCount) {
                     if (versionedPackage.getVersionCode() == VERSION_CODE) {
                         // Only rollback for specific versionCode
-                        return PackageHealthObserverImpact.USER_IMPACT_MEDIUM;
+                        return PackageHealthObserverImpact.USER_IMPACT_LEVEL_30;
                     }
-                    return PackageHealthObserverImpact.USER_IMPACT_NONE;
+                    return PackageHealthObserverImpact.USER_IMPACT_LEVEL_0;
                 }
             };
 
@@ -442,13 +442,13 @@
     public void testPackageFailureNotifyAllDifferentImpacts() throws Exception {
         PackageWatchdog watchdog = createWatchdog();
         TestObserver observerNone = new TestObserver(OBSERVER_NAME_1,
-                PackageHealthObserverImpact.USER_IMPACT_NONE);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_0);
         TestObserver observerHigh = new TestObserver(OBSERVER_NAME_2,
-                PackageHealthObserverImpact.USER_IMPACT_HIGH);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_100);
         TestObserver observerMid = new TestObserver(OBSERVER_NAME_3,
-                PackageHealthObserverImpact.USER_IMPACT_MEDIUM);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_30);
         TestObserver observerLow = new TestObserver(OBSERVER_NAME_4,
-                PackageHealthObserverImpact.USER_IMPACT_LOW);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_10);
 
         // Start observing for all impact observers
         watchdog.startObservingHealth(observerNone, Arrays.asList(APP_A, APP_B, APP_C, APP_D),
@@ -499,9 +499,9 @@
     public void testPackageFailureNotifyLeastImpactSuccessively() throws Exception {
         PackageWatchdog watchdog = createWatchdog();
         TestObserver observerFirst = new TestObserver(OBSERVER_NAME_1,
-                PackageHealthObserverImpact.USER_IMPACT_LOW);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_10);
         TestObserver observerSecond = new TestObserver(OBSERVER_NAME_2,
-                PackageHealthObserverImpact.USER_IMPACT_MEDIUM);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_30);
 
         // Start observing for observerFirst and observerSecond with failure handling
         watchdog.startObservingHealth(observerFirst, Arrays.asList(APP_A), LONG_DURATION);
@@ -517,7 +517,7 @@
         assertThat(observerSecond.mMitigatedPackages).isEmpty();
 
         // After observerFirst handles failure, next action it has is high impact
-        observerFirst.mImpact = PackageHealthObserverImpact.USER_IMPACT_HIGH;
+        observerFirst.mImpact = PackageHealthObserverImpact.USER_IMPACT_LEVEL_100;
         observerFirst.mMitigatedPackages.clear();
         observerSecond.mMitigatedPackages.clear();
 
@@ -531,7 +531,7 @@
         assertThat(observerFirst.mMitigatedPackages).isEmpty();
 
         // After observerSecond handles failure, it has no further actions
-        observerSecond.mImpact = PackageHealthObserverImpact.USER_IMPACT_NONE;
+        observerSecond.mImpact = PackageHealthObserverImpact.USER_IMPACT_LEVEL_0;
         observerFirst.mMitigatedPackages.clear();
         observerSecond.mMitigatedPackages.clear();
 
@@ -545,7 +545,7 @@
         assertThat(observerSecond.mMitigatedPackages).isEmpty();
 
         // After observerFirst handles failure, it too has no further actions
-        observerFirst.mImpact = PackageHealthObserverImpact.USER_IMPACT_NONE;
+        observerFirst.mImpact = PackageHealthObserverImpact.USER_IMPACT_LEVEL_0;
         observerFirst.mMitigatedPackages.clear();
         observerSecond.mMitigatedPackages.clear();
 
@@ -566,9 +566,9 @@
     public void testPackageFailureNotifyOneSameImpact() throws Exception {
         PackageWatchdog watchdog = createWatchdog();
         TestObserver observer1 = new TestObserver(OBSERVER_NAME_1,
-                PackageHealthObserverImpact.USER_IMPACT_HIGH);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_100);
         TestObserver observer2 = new TestObserver(OBSERVER_NAME_2,
-                PackageHealthObserverImpact.USER_IMPACT_HIGH);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_100);
 
         // Start observing for observer1 and observer2 with failure handling
         watchdog.startObservingHealth(observer2, Arrays.asList(APP_A), SHORT_DURATION);
@@ -592,11 +592,11 @@
         TestController controller = new TestController();
         PackageWatchdog watchdog = createWatchdog(controller, true /* withPackagesReady */);
         TestObserver observer1 = new TestObserver(OBSERVER_NAME_1,
-                PackageHealthObserverImpact.USER_IMPACT_HIGH);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_100);
         TestObserver observer2 = new TestObserver(OBSERVER_NAME_2,
-                PackageHealthObserverImpact.USER_IMPACT_HIGH);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_100);
         TestObserver observer3 = new TestObserver(OBSERVER_NAME_3,
-                PackageHealthObserverImpact.USER_IMPACT_HIGH);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_100);
 
 
         // Start observing with explicit health checks for APP_A and APP_B respectively
@@ -645,7 +645,7 @@
         TestController controller = new TestController();
         PackageWatchdog watchdog = createWatchdog(controller, true /* withPackagesReady */);
         TestObserver observer = new TestObserver(OBSERVER_NAME_1,
-                PackageHealthObserverImpact.USER_IMPACT_MEDIUM);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_30);
 
         // Start observing with explicit health checks for APP_A and APP_B
         controller.setSupportedPackages(Arrays.asList(APP_A, APP_B, APP_C));
@@ -711,7 +711,7 @@
         TestController controller = new TestController();
         PackageWatchdog watchdog = createWatchdog(controller, true /* withPackagesReady */);
         TestObserver observer = new TestObserver(OBSERVER_NAME_1,
-                PackageHealthObserverImpact.USER_IMPACT_MEDIUM);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_30);
 
         // Start observing with explicit health checks for APP_A and
         // package observation duration == LONG_DURATION
@@ -742,7 +742,7 @@
         TestController controller = new TestController();
         PackageWatchdog watchdog = createWatchdog(controller, true /* withPackagesReady */);
         TestObserver observer = new TestObserver(OBSERVER_NAME_1,
-                PackageHealthObserverImpact.USER_IMPACT_MEDIUM);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_30);
 
         // Start observing with explicit health checks for APP_A and
         // package observation duration == SHORT_DURATION / 2
@@ -818,7 +818,7 @@
 
         // Start observing with failure handling
         TestObserver observer = new TestObserver(OBSERVER_NAME_1,
-                PackageHealthObserverImpact.USER_IMPACT_HIGH);
+                PackageHealthObserverImpact.USER_IMPACT_LEVEL_100);
         wd.startObservingHealth(observer, Collections.singletonList(APP_A), SHORT_DURATION);
 
         // Notify of NetworkStack failure
@@ -1073,9 +1073,9 @@
     public void testBootLoopMitigationDoneForLowestUserImpact() {
         PackageWatchdog watchdog = createWatchdog();
         TestObserver bootObserver1 = new TestObserver(OBSERVER_NAME_1);
-        bootObserver1.setImpact(PackageHealthObserverImpact.USER_IMPACT_LOW);
+        bootObserver1.setImpact(PackageHealthObserverImpact.USER_IMPACT_LEVEL_10);
         TestObserver bootObserver2 = new TestObserver(OBSERVER_NAME_2);
-        bootObserver2.setImpact(PackageHealthObserverImpact.USER_IMPACT_MEDIUM);
+        bootObserver2.setImpact(PackageHealthObserverImpact.USER_IMPACT_LEVEL_30);
         watchdog.registerHealthObserver(bootObserver1);
         watchdog.registerHealthObserver(bootObserver2);
         for (int i = 0; i < PackageWatchdog.DEFAULT_BOOT_LOOP_TRIGGER_COUNT; i++) {
@@ -1446,7 +1446,7 @@
 
         TestObserver(String name) {
             mName = name;
-            mImpact = PackageHealthObserverImpact.USER_IMPACT_MEDIUM;
+            mImpact = PackageHealthObserverImpact.USER_IMPACT_LEVEL_30;
         }
 
         TestObserver(String name, int impact) {
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/WindowAnimationJank/Android.bp b/tests/WindowAnimationJank/Android.bp
index ed86aa5..8542f88 100644
--- a/tests/WindowAnimationJank/Android.bp
+++ b/tests/WindowAnimationJank/Android.bp
@@ -25,7 +25,7 @@
     name: "WindowAnimationJank",
     srcs: ["src/**/*.java"],
     static_libs: [
-        "ub-uiautomator",
+        "androidx.test.uiautomator_uiautomator",
         "androidx.test.janktesthelper",
         "junit",
     ],
diff --git a/tests/WindowAnimationJank/src/android/windowanimationjank/Utils.java b/tests/WindowAnimationJank/src/android/windowanimationjank/Utils.java
index 2531464..48a359c 100644
--- a/tests/WindowAnimationJank/src/android/windowanimationjank/Utils.java
+++ b/tests/WindowAnimationJank/src/android/windowanimationjank/Utils.java
@@ -18,11 +18,12 @@
 import android.content.ComponentName;
 import android.content.Intent;
 import android.os.SystemClock;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.BySelector;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject2;
-import android.support.test.uiautomator.Until;
+
+import androidx.test.uiautomator.By;
+import androidx.test.uiautomator.BySelector;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.UiObject2;
+import androidx.test.uiautomator.Until;
 
 /**
  * Set of helpers to manipulate test activities.
diff --git a/tests/WindowAnimationJank/src/android/windowanimationjank/WindowAnimationJankTestBase.java b/tests/WindowAnimationJank/src/android/windowanimationjank/WindowAnimationJankTestBase.java
index a8ace162..cb7c511 100644
--- a/tests/WindowAnimationJank/src/android/windowanimationjank/WindowAnimationJankTestBase.java
+++ b/tests/WindowAnimationJank/src/android/windowanimationjank/WindowAnimationJankTestBase.java
@@ -16,9 +16,8 @@
 
 package android.windowanimationjank;
 
-import android.support.test.uiautomator.UiDevice;
-
 import androidx.test.jank.JankTestBase;
+import androidx.test.uiautomator.UiDevice;
 
 /**
  * This adds additional system level jank monitor and its result is merged with primary monitor
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/src/android/testing/TestableResources.java b/tests/testables/src/android/testing/TestableResources.java
index c60f07d..27d5b66 100644
--- a/tests/testables/src/android/testing/TestableResources.java
+++ b/tests/testables/src/android/testing/TestableResources.java
@@ -59,7 +59,8 @@
      * Since resource ids are unique there is a single addOverride that will override the value
      * whenever it is gotten regardless of which method is used (i.e. getColor or getDrawable).
      * </p>
-     * @param id The resource id to be overridden
+     *
+     * @param id    The resource id to be overridden
      * @param value The value of the resource, null to cause a {@link Resources.NotFoundException}
      *              when gotten.
      */
@@ -74,28 +75,33 @@
      * cause a {@link Resources.NotFoundException} whereas removing the override will actually
      * switch back to returning the default/real value of the resource.
      * </p>
-     * @param id
      */
     public void removeOverride(int id) {
         mOverrides.remove(id);
     }
 
     private Object answer(InvocationOnMock invocationOnMock) throws Throwable {
-        try {
-            int id = invocationOnMock.getArgument(0);
-            int index = mOverrides.indexOfKey(id);
-            if (index >= 0) {
-                Object value = mOverrides.valueAt(index);
-                if (value == null) throw new Resources.NotFoundException();
-                return value;
+        // Only try to override methods with an integer first argument
+        if (invocationOnMock.getArguments().length > 0) {
+            Object argument = invocationOnMock.getArgument(0);
+            if (argument instanceof Integer) {
+                try {
+                    int id = (Integer)argument;
+                    int index = mOverrides.indexOfKey(id);
+                    if (index >= 0) {
+                        Object value = mOverrides.valueAt(index);
+                        if (value == null) throw new Resources.NotFoundException();
+                        return value;
+                    }
+                } catch (Resources.NotFoundException e) {
+                    // Let through NotFoundException.
+                    throw e;
+                } catch (Throwable t) {
+                    // Generic catching for the many things that can go wrong, fall back to
+                    // the real implementation.
+                    Log.i(TAG, "Falling back to default resources call " + t);
+                }
             }
-        } catch (Resources.NotFoundException e) {
-            // Let through NotFoundException.
-            throw e;
-        } catch (Throwable t) {
-            // Generic catching for the many things that can go wrong, fall back to
-            // the real implementation.
-            Log.i(TAG, "Falling back to default resources call " + t);
         }
         return invocationOnMock.callRealMethod();
     }
diff --git a/tests/testables/src/android/testing/TestableSettingsProvider.java b/tests/testables/src/android/testing/TestableSettingsProvider.java
index c6f18fd..b850cb8 100644
--- a/tests/testables/src/android/testing/TestableSettingsProvider.java
+++ b/tests/testables/src/android/testing/TestableSettingsProvider.java
@@ -72,7 +72,11 @@
 
     public Bundle call(String method, String arg, Bundle extras) {
         // Methods are "GET_system", "GET_global", "PUT_secure", etc.
-        final int userId = extras.getInt(Settings.CALL_METHOD_USER_KEY, UserHandle.myUserId());
+        int userId = extras.getInt(Settings.CALL_METHOD_USER_KEY, UserHandle.USER_CURRENT);
+        if (userId == UserHandle.USER_CURRENT || userId == UserHandle.USER_CURRENT_OR_SELF) {
+            userId = UserHandle.myUserId();
+        }
+
         final String[] commands = method.split("_", 2);
         final String op = commands[0];
         final String table = commands[1];
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;